hal*_*000 3 grep sed awk text-processing
想象一下以下文件结构:
foo.bar.1
blabla
moreblabla
relevant=yes
foo.bar.2
relevant=no
foo.bar.3
blablabla
foo.bar.4
relevant=yes
Run Code Online (Sandbox Code Playgroud)
我想检索foo.bar
在块内跟随自己并且在下一个之前foo.bar
有一行声明的所有行relevant=yes
。
所以输出应该是:
foo.bar.1
foo.bar.4
Run Code Online (Sandbox Code Playgroud)
我当然可以编写一个程序/脚本遍历这些行,记住foo.bars
并在有一行说relevant=yes
在它们之后和下一个之前打印它们foo.bar
。但我认为使用标准 Unix 实用程序 (grep/sed/awk)可能有一种开箱即用的方式?
感谢任何提示!
如果输入是逐行处理的,那么处理需要像这样:
foo.bar
,则存储它,忘记任何foo.bar
未启用输出的前一行;relevant=yes
,这将启用最新foo.bar
的输出。这种推理是 awk 的工作。(如果你喜欢痛苦,也可以在 sed 中完成。)
awk '
/^foo\.bar/ { foobar = $0 }
/^relevant=yes$/ {if (foobar != "") {print foobar; foobar = ""}}
'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
199 次 |
最近记录: |