搜索和打印文件部分

时间:2015-04-27 21:01:00

标签: search grep

我有一个以下格式的文件 -

-----------------------
key1 = val11
key2 = val21
key3 = val31
-----------------------
key1 = val12
key2 = val22
key3 = val32
------------------------

我需要通过给出“key2 = val22”进行查询,并打印匹配块的完整部分(key1,key2,key3)。

2 个答案:

答案 0 :(得分:3)

其中一种可能的方法是使用csplit:

csplit -s --prefix=mytempfile testfile '/-----------------------/+0' "{*}" \
    && cat `grep -l 'key2.*=.*val22' mytempfile*` && rm mytempfile*

-----------------------
key1 = val12
key2 = val22
key3 = val32

答案 1 :(得分:2)

使用带有破折号的GNU awk作为输入记录分隔符:

gawk -v RS='-+\n' '/\<key2 = val22\>/' file

我在那里添加了几个单词边界以防止匹配“the_key2”或“val229”

您可以将键和值作为参数传递,但代价是可读性

gawk -v RS='-+\n' -v key=key2 -v val=val22 '$0 ~ "\\\<"key" = "val"\\\>"' file