在多行上打印正则表达式

时间:2013-09-11 14:11:43

标签: regex unix sed lines

我正在尝试在给定文件中搜索和打印(仅限)包含某些标识符的部分。这些部分由开始和结束标记分隔,并延伸多行。该任务需要通过unix命令完成。

例如,对于以下行:

start:
    blah..blah
    666
    blah blah..
end:
start:
    blah..blah
    1234
    blah blah..
end:
start:
    blah..blah
    8020
    blah blah..
end:         

我想打印出以'start'开头并以'end'结尾的部分,比如标识符1234:

start:
    blah..blah
    1234
    blah blah..
end:  

欢迎您的协助。

2 个答案:

答案 0 :(得分:1)

这可能适合你(GNU sed):

sed -n '/start:/{:a;N;/end:/!ba;/1234/p}' file

start:end:之间收集行,如果该集合还包含1234,则打印它们。

答案 1 :(得分:0)

中的触发器:

perl -ne '
    if ( $range = ( m/\Astart:/ .. m/\Aend:/ ) ) { 
        $s .= $_; 
        if ( $range =~ /E0\Z/ ) {
            if ( $s =~ m/(?m)^\s*1234\s*$/ ) {
                print $s;
            }
            undef $s;
        }
    }
' infile

它产生:

start:
    blah..blah
    1234
    blah blah..
end:
相关问题