匹配模式

时间:2016-06-21 06:35:52

标签: linux bash awk sed pattern-matching

我想在匹配后才打印两条空行之间的线条。我的数据如下:

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并使用带有标签的{},但我还不够先进,无法将它们放在一起。如果你能指出我正确的方向,真的很感激。

2 个答案:

答案 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会禁止打印行。