我试图删除包含列表中任何单词的文本中的行。例如:
文件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的行。但它如何在多个单词或文件中的单词中起作用?
答案 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