例如,对于以下消息,我只想提取以“Receiving message”开头、以“Processed”结尾、中间有“Overriden”的消息。
Receiving message
Processing
Processed
dummy 1
dummy 2
Receiving message
Processing
Overriden
Processed
dummy 3
dummy 4
Receiving message
Processing
Processed
dummy 5
预期输出:
Receiving message
Processing
Overriden
Processed
以下将获取范围,但如何通过匹配“Overriden”再次过滤并打印其间的所有行?
awk '/Receiving message/,/Processed/'
请注意,“已处理”和下一个“正在接收消息”之间还有其他行,这些行是不需要的。
最佳答案
这个问题已经被问过和回答过一千次了,但写下答案比搜索更容易,所以这里又是:
$ cat tst.awk
/Receiving message/ { f=1 }
f {
buf = buf $0 ORS
if ( /Processed/ ) {
if ( buf ~ /Overriden/ ) {
printf "%s", buf
}
f=0
buf=""
}
}
$ awk -f tst.awk file
Receiving message
Processing
Overriden
Processed
关于shell - 如何使用 awk 打印具有特定模式的开始和结束标记之间的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640908/