2

我有一个名为file1.txt. 我想删除包含“中心”、“农场”或“中间”等字样的每一行,但包含“①”或“城市”的行除外。

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

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

4

3 回答 3

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
于 2012-04-22T07:15:53.240 回答
2
sed -r '/①|city/{p;d};/center of|farm|middle of/d' file1.txt
于 2012-04-22T03:31:00.577 回答
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,只有包含 a 或 b 时才包含 c 或 d 的行。

于 2012-04-22T12:49:13.993 回答