如果两条线连续匹配字符串,则仅下一条线

时间:2016-09-20 18:03:05

标签: linux bash awk sed grep

我使用以下命令匹配文件中的以下行:

cat file.txt | grep -A 1 'match' > output.txt

这使我可以在“匹配”后获得该线路。可在以下文件中找到:

match
random text line 1
match
match
match
random text line 2
match
random text line 3
match
match
random text line 4
match
random text line 5
match
random text line 6
match
random text line 7
match
random text line 8
match
match
random text line 9

但是,我需要在连续两次或更多次匹配后才返回这些行。线。在这种情况下,输出将是:

random text line 2
random text line 4
random text line 9

我尝试过使用grep -A 2 'match' | grep -A 1 'match'的组合,但它不会起作用,因为它是多余的。我只是在有两条连续的线路时才会遇到如何匹配。如果效率更高,我也可以使用awk或sed进行匹配。任何方向都将不胜感激。

1 个答案:

答案 0 :(得分:2)

grep代表g/re/p,即全局查找正则表达式并打印结果,全部。这不是你想要做的所有,因此grep将是尝试使用的错误工具。对于通用文本操作,使用的标准工具是awk:

$ awk '/match/{c++;next} c>1; {c=0}' file
random text line 2
random text line 4
random text line 9