文字列を検索し、2つのパターン間のすべての行を取り出したいです。 [重複]

文字列を検索し、2つのパターン間のすべての行を取り出したいです。 [重複]

文字列を検索して、2つのパターン(パターンを含む)間のすべての行を抽出したいと思います。

#1 スタート

名前S

101

フランクフルト_1_1

19号

A+

ストリート


終わり


#2 スタート

名前B

104

ベルリン

20

A+

ストリート


終わり



スタート #100

名前C

107

ベルリン

20日

A+

ストリート

終わり



#24 スタート

名前付き

110

フランクフルト_1_1

20日

A+



終わり

grep私がフランクフルトラーメン

その後、STARTとEND(STARTとENDを含む)の間のすべての行を表示する必要があります。たとえば、次のようになります。

#1 スタート

名前S

101

フランクフルト_1_1

19号

A+

ストリート


終わり


#24 スタート

名前付き

110

フランクフルト_1_1

20日

A+

ストリート


終わり

私が使用したコマンドは次のとおりです。

猫ファイルawk '/START/,/END/' | grep -p フランクフルト

しかし、それはうまくいきませんでした。

答え1

検索は複数行に基づいているため、awkがその操作に適したツールであるかどうかはわかりません。私はこれがPerlの仕事だと思います。利用可能なファイルを参照するには(awkステートメントに似ています):

if (/^START/ .. /^END/){}

そこから行を配列に保存し、フランクフルトが満たされたら行を印刷します(ここではブール値を使用)。

push @lines, $_;
if (/Frankfurt/)
        $toPrint = 1;

いずれの場合も、パターンから出るときにブール値が true の場合は配列を印刷し、それ以外の場合は印刷せずに配列を消去します。

答え2

私たちは間違いなく使用できますawk。これを試してください

awk -v RS="END" '$0~/フランクフルト/{print $0 RS}' ファイル

関連情報