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

Text 删除命令行中包含多个单词的整行,text,command-line,sed,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的行。但是它如何在多个单词中工作,或者如何在一个文件中工作?您可以使用grep轻松做到这一点: $ gr

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

文件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的行。但是它如何在多个单词中工作,或者如何在一个文件中工作?

您可以使用
grep
轻松做到这一点:

$ grep -Fwvf file2 file1
aaa bbb, sss,
选项:

-f FILE,--FILE=FILE

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

-v、 --反向匹配

反转匹配的意义,以选择不匹配的线。(-v由POSIX指定。)

-w、 --word regexp

仅选择包含构成整词的匹配项的行。测试结果是 匹配的子字符串必须位于行的开头,或者前面有一个非单词 构成特征。类似地,它必须位于行的末尾或后跟 非单词组成字符。单词组成字符包括字母、数字和 下划线

-F、 --固定字符串

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

要将更改存储回
文件1

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

使用
grep
,您可以轻松做到这一点:

$ grep -Fwvf file2 file1
aaa bbb, sss,
选项:

-f FILE,--FILE=FILE

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

-v、 --反向匹配

反转匹配的意义,以选择不匹配的线。(-v由POSIX指定。)

-w、 --word regexp

仅选择包含构成整词的匹配项的行。测试结果是 匹配的子字符串必须位于行的开头,或者前面有一个非单词 构成特征。类似地,它必须位于行的末尾或后跟 非单词组成字符。单词组成字符包括字母、数字和 下划线

-F、 --固定字符串

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

要将更改存储回
文件1

$ grep -Fwvf file2 file1 > tmp && mv tmp file1
试试这个:

grep -vFwf file2 file1
试试这个:

grep -vFwf file2 file1

是。。一点点如果文件2中有一行像“r.r”甚至“r.*”,那么它就不匹配@Kent您的答案是相同的,但是没有选项解释或将更改存储回文件,它会匹配,而我的在您修复您的答案之前是不相同的。现在它们都一样了。你的固定版本应该可以了+1前面的一个没有得到结果,但这一个有效,谢谢!是。。一点点如果文件2中有一行像“r.r”甚至“r.*”,那么它就不匹配@Kent您的答案是相同的,但是没有选项解释或将更改存储回文件,它会匹配,而我的在您修复您的答案之前是不相同的。现在它们都一样了。你的固定版本应该可以了+1前面的一个没有得到结果,但这一个有效,谢谢!