在多行上打印正则表达式



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

例如,对于以下行:

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

我想打印以"开始"分层并以"结束"结尾的部分,例如标识符 1234:

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

欢迎您的帮助。

这可能对你有用(GNU sed):

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

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

perl 中的触发器:

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

它产生:

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

最新更新