我想在匹配后才打印两条空行之间的线条。我的数据如下:
List A
Item 1
Item 2
Item 3
Item 4
Item 5
List B
Item 1
Item 2
Item 3
因此,我试图获得一个sed或awk或grep命令来匹配列表A并获得
的输出Item 4
Item 5
到目前为止,我已经尝试过:
sed '/^$/,/^$/!d'
和
sed '/list\sA.*^$/,/^$/!d'
在这种情况下,我尝试打印范围并将第一个模式定义为字符串,并将所有内容包含在空行中。
我还尝试了其他代码:
awk -v RS='' -v ORS='\n\n'
但是,这只给了我包含模式的段落,我试图在那之后得到段落。
最后,我认为这是使用sed -n
并使用带有标签的{},但我还不够先进,无法将它们放在一起。如果你能指出我正确的方向,真的很感激。
答案 0 :(得分:4)
匹配模式时,请使用getline
获取下一条记录:
$ awk -v RS='' '/List A/ {getline; print}' file
Item 4
Item 5
答案 1 :(得分:0)
我建议在这里使用awk
,如fedorqui的回答所示。但是,以下sed
命令也可以正常工作:
sed -n '/List A/{:a;n;/^$/!ba;:b;n;/^$/!{p;bb}}' file
说明:
/List A/ {
:a # Label "a"
n # Get new line from input
/^$/! ba # If this line is not empty jump back to :a
:b # Label "b"
n # Get new line from input
/^$/! { # If this line is not empty:
p # Print the line
bb # Jump back to :b
}
}
除非使用-n
,否则选项p
会禁止打印行。