2016-09-20 24 views
1

我使用下面的命令来匹配文件以下行: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 

但是,我只需要返回2个或更多连续的“匹配”行后面的行。在这种情况下,输出将是:

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

我一直在使用的grep -A 2 'match' | grep -A 1 'match'组合尝试,但它不工作,因为它是多余的。如果只有两条连续的线,我就会陷入困境。如果它更高效,我愿意使用awk或sed进行匹配。任何方向将不胜感激。

回答

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 
+1

感谢您的解释了。这很好。我真的需要更多地使用awk。看起来像很酷(和准确)的事情:-) – DomainsFeatured

+0

实际上,当线顺序匹配时,它会返回不正确的“随机文本行”,随机文本行11,匹配,随机文本行12,匹配,随机文本行13'。在那种情况下,第13行将被输出(尽管它只有一个“匹配”,而不是两个)。我可以编辑你的答案并提供失败的例子吗? – DomainsFeatured

+0

这是复制它的一种方法。但是,我得到的直线上方只有1'匹配',而不是连续两条'匹配'线: -/ – DomainsFeatured