从文件目录中的文件中找到模式

时间:2019-02-14 19:53:49

标签: shell grep

我有3行的第一个文件:

test1  
test2  
test3

我使用grep cmd搜索目录中包含10个文件的每一行:

  

grep -Ril“ test2”

结果是:

  

/usr/src/files/rog.txt

我需要grep从最终文件中删除5行,test2之前的2行和之后的2

请帮助我更好地使用grep。

1 个答案:

答案 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”的。如果您正在处理文件列表,则可能没有重复。