在命令行中删除包含多个单词的整行

时间:2013-03-14 11:05:22

标签: text command-line sed

我试图删除包含列表中任何单词的文本中的行。例如:

文件1:

xxx yyy, zzz,
aaa bbb, sss,
ccc fff, zzz,
rrr www, qasd,

文件2:

xxx
zzz
rrr

目标是删除file1中包含file2中任何单词的行。 所以输出应该是:

aaa bbb, sss,  

我知道如何使用单词sed,比如sed'/ zzz / d'来删除包含zzz的行。但它如何在多个单词或文件中的单词中起作用?

2 个答案:

答案 0 :(得分:2)

您可以使用grep轻松完成此操作:

$ grep -Fwvf file2 file1
aaa bbb, sss,

选项:

  

-f FILE, - file = FILE

     

从FILE获取模式,每行一个。空文件包含零模式,因此             什么都不配。 (-f由POSIX指定。)

     

-v, - invert-match

     

反转匹配感,选择不匹配的线条。 (-v由POSIX指定。)

     

-w, - word-regexp

     

仅选择包含构成整个单词的匹配项的行。测试就是                 匹配子字符串必须位于行的开头,或者前面是非字                 组成性质。同样,它必须位于行的末尾或后跟a                 非单词构成字符。单词构成字符是字母,数字和                 下划线。

     

-F, - 固定字符串

     

将PATTERN解释为固定字符串列表,由换行符分隔,其中任何一行都是                 匹配。 (-F由POSIX指定。)

将更改存储回file1

$ grep -Fwvf file2 file1 > tmp && mv tmp file1

答案 1 :(得分:1)

试试这个:

grep -vFwf file2 file1