我有一个以下格式的文件 -
-----------------------
key1 = val11
key2 = val21
key3 = val31
-----------------------
key1 = val12
key2 = val22
key3 = val32
------------------------
我需要通过给出“key2 = val22”进行查询,并打印匹配块的完整部分(key1,key2,key3)。
答案 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