首页 > 解决方案 > sed 删除与包含斜杠的变量值匹配的字符串

问题描述

我正在尝试使用 sed 清理列表。$salvation 中出现的任何行都应该从已经设置的 $naughtyList 中删除。

我有;

$ echo "$naughtyList"
ONE/1/one
TWO/2/two
THREE/3/three
FOUR/4/four
FIVE/5/five

和;

$ echo "$salvation"
TWO/2/two
FOUR/4/four

问题是斜线字符。尝试时我无法逃脱它们;

for line in $(echo $salvation); do
naughtyList=$(echo $naughtyList | sed "/$line/d")
done
sed: -e expression #1, char 6: unknown command: `2'
sed: -e expression #1, char 7: unknown command: `4'

有没有办法通过 $line,还是我必须修改输入模式?

提前致谢。

标签: sedksh

解决方案


最好在grep -f这里使用过程替换:

grep -vFf <(echo "$salvation") <(echo "$naughtyList")
ONE/1/one
THREE/3/three
FIVE/5/five

要更新naughtyList变量,请使用:

naughtyList=$(grep -vFf <(echo "$salvation") <(echo "$naughtyList"))

推荐阅读