我有3行的第一个文件:
test1
test2
test3
我使用grep cmd搜索目录中包含10个文件的每一行:
grep -Ril“ test2”
结果是:
/usr/src/files/rog.txt
我需要grep从最终文件中删除5行,test2
之前的2行和之后的2
请帮助我更好地使用grep。
答案 0 :(得分:0)
有一种使用grep的-A和-B选项的方法。但是要使用它,您需要执行两个步骤。 首先,选择与上一行和下一行以及该列表匹配的所有匹配项,但这会产生一些副作用(在您的应用程序中可能是可以接受的)。
为此,发出以下命令:
grep -A 2 -B 2 "test2" file1.txt > negative.txt
grep -v -f negative.txt file1.txt
第一行输出file1.txt中test2的所有发现,并伴随找到的每一行的前2行和后2行。如果我对您的问题正确,那么这就是您想要的行中的“否定”字。第二行现在列出了file1.txt中与“负行”不对应的所有行。这应该接近您的需求。 您应该只知道一种副作用。如果file1.txt包含类似这样的重复行:
test1
test2
test3
test4
...
test11
test12
test3
test4
即使附近没有“ test2”行,上面的代码也会过滤掉最后两行,因为它们是第3行和第4行的重复,因为它们是由于第2行而写入“ negative.txt”的。如果您正在处理文件列表,则可能没有重复。