我有一个这样的文件(test.txt):
abc
12
34
def
56
abc
ghi
78
def
90
我想搜索由“abc\nghi”和“def”包围的78。目前,我知道我可以通过以下方式做到这一点:
cat test.txt | awk '/abc/,/def/' | awk '/ghi/,'/def/'
有没有更好的办法?
一种方法是使用标志
$ awk '/ghi/ && p~/abc/{f=1} f; /def/{f=0} {p=$0}' test.txt
ghi
78
def
{p=$0}
这将保存输入行以备将来使用/ghi/ && p~/abc/{f=1}
如果当前行包含ghi
且上一行包含则设置标志abc
f;
只要设置了标志就打印输入记录/def/{f=0}
如果行包含,则清除标志 def
如果你只想要这两个边界之间的线
$ awk '/ghi/ && p~/abc/{f=1; next} /def/{f=0} f; {p=$0}' ip.txt
78
$ awk '/12/ && p~/abc/{f=1; next} /def/{f=0} f; {p=$0}' ip.txt
34
另请参阅如何在两个图案之间选择线条?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句