Command line 使用sed/awk/etc从包含其他文件中任何字符串的文本文件中删除行

Command line 使用sed/awk/etc从包含其他文件中任何字符串的文本文件中删除行,command-line,grep,Command Line,Grep,在编程方面,我是一个完全的初学者,我非常感谢您提供的所有帮助 这是我的问题 我有一个data.txt文件,其中有很多行,还有一个strings.txt文件,其中包含一些字符串(每行1个字符串) 我想删除data.txt中的所有行,如果它们包含strings.txt中的任何字符串,并将新文件另存为proc_data.txt 我知道我可以使用sed搜索和删除1个或多个字符串,但在CLI中键入500多个字符串会使它。。。嗯,你知道 到目前为止我都试过了 ~$ for i in `cat strings

在编程方面,我是一个完全的初学者,我非常感谢您提供的所有帮助

这是我的问题

我有一个data.txt文件,其中有很多行,还有一个strings.txt文件,其中包含一些字符串(每行1个字符串)

我想删除data.txt中的所有行,如果它们包含strings.txt中的任何字符串,并将新文件另存为proc_data.txt

我知道我可以使用sed搜索和删除1个或多个字符串,但在CLI中键入500多个字符串会使它。。。嗯,你知道

到目前为止我都试过了

~$ for i in `cat strings.txt`; do sed '/${i}/d' data.txt -i.bak; done
但它只是对相同大小的data.txt进行备份

我做错了什么?

使用
grep

LC_ALL=C fgrep -v -f strings.txt data.txt >proc_data.txt

它使用开关
-f
data.txt
中搜索
strings.txt
的所有字符串。添加
-v
将结果反转。将输出重定向到所需的文件。

感谢您的回答,并为我指出了另一个方向:)请帮自己一个忙(如果您不使用regex,可能还需要fgrep)。数量级更快。@orangechicken:有趣的链接。修正了我的答案。