如何删除包含某些单词的所有行,除了那些包含某些单词的行?

时间:2012-04-22 03:25:55

标签: bash sed

我有一个名为file1.txt的文件。除了包含“①”或“city”的行外,我想删除包含单词“center of”,“farm”或“middle of”等的每一行。

  • 删除和例外列表很长。
  • 文件采用UTF-8格式。

如何删除至少包含其中一个单词的每一行,而不删除那些有一些例外的行?

3 个答案:

答案 0 :(得分:3)

这可能对您有用:

sed -i '/center of\|farm\|middle of/{/①\|city/!d}' file1.txt

sed -i '/center of/ba
        /farm/ba
        /middle of/ba
        b 
        :a
        /①/b
        /city/b
        d' file1.txt

如果您有words.txtexceptions.txt个文件,请使用:

sed '/\*exceptions\*/{h;s/.*/:a/p;d}
    x
    /./{x;s|.*|/&/b|p;$!d;s/.*/d/;q}
    x
    s|.*|/&/ba|' words.txt - <<<"*exceptions*" exceptions.txt > file.sed
sed -i -f file.sed file1.txt

答案 1 :(得分:2)

sed -r '/①|city/{p;d};/center of|farm|middle of/d' file1.txt

答案 2 :(得分:1)

sed '/blacklist/{/whitelist/p;d}' file

删除黑名单,但白名单除外:

echo -e "a b\nb c\nc d\nd e\ne f" | sed '/c\|d/{/a\|b/p;d}'

打印

a b
b c
e f

是每行,不包含c或d,只有包含c或d的行,如果它们包含a或b。