1

我正在尝试在给定文件中搜索和打印(仅)包含某些标识符的部分。这些部分由开始和结束标签分隔,并延伸到多行。该任务需要通过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:  

欢迎您的协助。

4

2 回答 2

1

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

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

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

于 2013-09-11T14:35:24.380 回答
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:
于 2013-09-11T14:21:10.297 回答