【问题标题】:How to extract lines between two patterns using lines in between as a printing condition如何使用中间的线条作为打印条件来提取两个图案之间的线条
【发布时间】:2014-07-30 10:56:25
【问题描述】:

我正在寻找一种使用以下代码作为基础的方法

function get { 
  awk '/^\[ '"$1"' \]/{p=1;next} /^$/{p=0} p' "${MY_FILE_PATH}"
}

提取myfile的完整部分:

[ SECTION_1 ]
info 1
info 2
info 3

[ SECTION_2 ]
info 4
info 5
info 6

以它的条目为条件。

例如,当我询问info 2 时,它应该打印完整的SECTION_1。 我想过使用额外的标志,但我没有得到想要的结果。

有没有可以从上面的函数get派生出的解决方案来实现这种行为?

感谢小费和提示 :)

【问题讨论】:

    标签: regex awk multiline


    【解决方案1】:

    你可以用RS=这个awk:

    awk -v s="SECTION_1" -v RS= '$0 ~ "\\[ " s " \\]"' file
    [ SECTION_1 ]
    info 1
    info 2
    info 3
    

    或者使用info 2作为搜索字符串

    awk -v s="info 2" -v RS= '$0 ~ s' file
    [ SECTION_1 ]
    info 1
    info 2
    info 3
    

    【讨论】:

    • 好的,那么我必须更精确。我只想打印出包含特定值的部分(包括其所有值)。您现在不会以前的部分名称!
    • 第二个给出了我想要实现的目标。谢谢!很高兴能简短地解释一下这到底是做什么的:)
    • 是的,很高兴它成功了。这里的主要技巧是使用RS=,它将记录分隔符设置为null,从而使整个部分直到空白行作为一个记录。这样做可以让我们使用info 1info 2 等在该部分的任何位置进行搜索。
    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2014-01-06
    • 1970-01-01
    相关资源
    最近更新 更多