【问题标题】:sed delete string matching a variable value containing slashessed 删除与包含斜杠的变量值匹配的字符串
【发布时间】:2020-09-28 14:52:41
【问题描述】:

我正在尝试使用 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,还是我必须修改输入模式?

提前致谢。

【问题讨论】:

    标签: sed ksh


    【解决方案1】:

    最好在此处使用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"))
    

    【讨论】:

    • 哇。我从来不知道 grep 可以做到这一点。非常感谢 - 工作愉快!
    猜你喜欢
    • 2015-10-04
    • 2014-09-30
    • 1970-01-01
    • 2019-05-11
    • 2012-07-18
    • 2018-01-29
    • 2021-11-13
    • 1970-01-01
    • 2022-01-11
    相关资源
    最近更新 更多