如何使用两者之间的线条作为打印条件来提取两个图案之间的线条

时间:2014-07-30 10:56:25

标签: regex awk multiline

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

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派生以实现此行为?

感谢tipps和提示:)

1 个答案:

答案 0 :(得分:2)

你可以使用RS=

来解决这个问题
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