たとえば、テキストに「一致」があるすべての行と、以前にインデントされていない行を探したいとします。
Container 1
some text
some text
matching text
some text
Container 2
some text
some text
Container 3
some text
matching text
私が望む結果は次のとおりです。
Container 1
matching text
Container 3
matching text
可能ですか?
ベストアンサー1
1つの方法は次のとおりですsed
。
sed -n '/^[^[:blank:]]/b do # if line is not indented go to label do
//!{ # if line is indented and if it
/matching/H # matches, append it to hold space
}
$b do # if on last line go to label do
b # branch to end of script
: do # label do
x # exchange hold buffer w. pattern space
/\n.*matching/p # if current pattern space matches, print
' infile
インデントされていない一致行も印刷する場合(たとえば、Container matching stuff
次のインデントブロックに一致する行がない場合など)、最後の条件を変更して制限を/matching/p
削除\n.*
し、1行だけ残ってもパターンスペースを印刷します(インデントなし)。 )マッチ:
sed -n '/^[^[:blank:]]/b do
//!{
/matching/H
}
$b do
b
: do
x
/matching/p
' infile