在linux / unix系统上,我需要搜索工具的输出,该工具以空行分隔的块打印返回的数据。
以空行作为分隔符,我需要在这些文本块中搜索字符串,如果字符串存在,则打印整个块。
示例文本看起来像这样
Tool output for hostname 'Example0'
Some random data
Tool returned this unique value: Ignore me. More data on line.
More random data
Address for hostname 'Example0'
Tool output for hostname 'Example1'
Some random data
More random data
Tool returned this unique value: Print me. More data on line.
More random data
Address for hostname 'Example1'
Tool output for hostname 'Example2'
Some random data
More random data
Tool returned this unique value: Ignore me. More data on line.
More random data
So much random data
Address for hostname 'Example2'
我需要一个命令行单行程序,可以将其输出到标准输出,这样我就可以保存,管道等等:
Tool output for hostname 'Example1'
Some random data
More random data
Tool returned this unique value: Print me. More data on line.
More random data
Address for hostname 'Example1'
在我的样本集中,我一直只有几千行只包含几百个块。我需要能够根据“打印我”的存在打印整个块。在街区内。打印我的多个实例'在单个文件中需要完整打印多个块。
我不在乎我是否使用awk,grep,sed。我认为有一个简单的答案,我只是在正则表达式上失败了。
提前感谢您提供的任何帮助。
答案 0 :(得分:1)
简单 awk 方法:
export PATH=$PATH:$ANDROID_HOME/bin
输出:
awk 'BEGIN{RS=ORS="\n\n"}/Print me/' file
答案 1 :(得分:0)
Perl救援:
perl -00 -ne 'print if /Print me/' input
-00
打开“段落模式”,即它读取由空行分隔的块-n
逐块处理输入/Print me/
是正则表达式匹配。如果您的实际字符串包含控制字符,则可能需要将其转义,或者您可以使用index代替