私はこのファイルを持っています:
sometext1{
string1
}
sometext2{
string2
string3
}
sometext3{
string4
string5
string6
}
このファイルで特定の文字列を検索し、この文字列の前から始まりまで、{およびこの文字列の後から終わりまでのすべてを印刷します}。私はsedでこれを達成しようとしましたが/{/,/string2/、たとえばsedでこの範囲のすべてを印刷しようとすると、次のように印刷されます。
sometext1{
string1
}
sometext2{
string2
sometext3{
string4
string5
string6
}
文字列「string2」を検索すると、次のような出力が必要です。
sometext2{
string2
string3
}
ありがとう。
grep -n '' <infile | sed ...です。sedコマンドは、修飾が必要になります。特に、最上位のアンカーを探す/アドレス/ビット^。したがって、私の答えを使用している場合は、おそらく次のようにすることができますgrep -n '' | sed 'H;/{$/h;/^[^:]*:}/x;/{\n.*PATTERN/!d'。すべての出力行には、元のファイルの行番号の前にコロンなどが付加さ1:sometext1{\n2:string1れます。sed各出力行が番号で開くことを除いて、以前にフィルタリングするものだけをフィルタリングします。