如果内容具有字符串,则在两个分隔符之间打印文本块

时间:2017-04-28 08:57:27

标签: linux bash awk sed grep

在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。我认为有一个简单的答案,我只是在正则表达式上失败了。

提前感谢您提供的任何帮助。

2 个答案:

答案 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代替