如何递归地从所有文件中删除所有与字符串列表不匹配的行

How to remove, from all files recursively, all lines that don't match list of strings

我正在尝试从不需要的行中清除一大堆日志文件,只留下那些包含一些字符串的行。例如:

sunday morning NOPE again
may it be DENSE in such a place
nothing here really 

在这种情况下,只保留包含 NOPE 或 DENSE 的行。

我试过使用示例中的 sed,但没能为字符串列表添加 or,例如:

sed -ni.bak '/\NOPE/p' file

你可以使用这个sed:

sed -E -i.bak '/NOPE|DENSE/!d' file

这将删除所有没有 NOPEDENSE 字符串的行。

如果您只想匹配完整的单词,请使用:

gnu-sed 命令:

sed -i -E '/\b(NOPE|DENSE)\b/!d' file

bsd-sed 命令:

sed -E -i.bak '/[[:<:]](NOPE|DENSE)[[:>:]]/!d' file