我正在尝试在给定文件中搜索和打印(仅限)包含某些标识符的部分。这些部分由开始和结束标记分隔,并延伸多行。该任务需要通过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:
欢迎您的协助。
答案 0 :(得分:1)
这可能适合你(GNU sed):
sed -n '/start:/{:a;N;/end:/!ba;/1234/p}' file
在start:
和end:
之间收集行,如果该集合还包含1234
,则打印它们。
答案 1 :(得分:0)
perl中的触发器:
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: