我的档案里有这样一个模式:
....
BEGIN
any text1
any text2
END
....
BEGIN
any text3
garbage text
any text4
END
....
BEGIN
any text5
any text6
END
...
BEGIN
和END
是我的标记,只有当块不包含'garbage text
'时,我才想提取标记之间的所有文本。所以我的期望是提取吹塑块:
any text1
any text2
any text5
any text6
我怎么在awk里做呢?我知道我可以做这样的事情:
awk '/BEGIN/{f=1;next}/END/{f=0;}f' file.log
来提取两个标记之间的线,但是我如何通过基于不存在' garbage text
'的进一步过滤来进一步细化结果?
1条答案
按热度按时间pftdvrlh1#
以上假设每个END都与前面的开始配对。使用GNU awk for multi-char RS,您可以选择:
btw而不是:
你的原始代码应该是:
有关相关习惯用法,请参见使用sed或awk在匹配模式之后打印一行。