特定の複数行パターンから最後までファイルの内容を表示します。

特定の複数行パターンから最後までファイルの内容を表示します。

複数行モードで最後までファイルの内容を表示する方法パターン自体を含む

しばらく前に同様の質問をしましたが、内容が違うので、別の新しい質問に載せてみようかと思っています。だから、単にそれのためにこの重複項目を表示しないでください!

たとえば、次のテキストファイルがあるとします。

cat
dog
fox
cow
dove
bird
bunny
gnu
hen
dove
bird
buffalo

私のスキーマが次のような場合:

dove
bird
bunny

私が得たいものは:

dove
bird
bunny
gnu
hen
dove
bird
buffalo

私の実際のファイルはかなり大きいので、これを達成する方法が複数ある場合は、より速い方法を好みます。

ベストアンサー1

パターンが最初に表示されてから印刷を開始するのは簡単です。私が説明したのと同じ論理に従ってもう一つの答えしかし、いくつかの追加のロジックがあります。

解析.sed

/^dove$/ {            # Match multi-line pattern
  N                   #  /
  N                   # /
  /\nbird\nbunny$/bb  # When matched jump to label b
}
d                     # Restart with next line if no match
:b                    # \
n                     #  Print the rest of the file
bb                    # /

次のように実行します。

sed -f parse.sed infile

またはポータブルシングルライナーで:

sed -n -e '/^dove$/{N;N;/\nbird\nbunny$/bb' -e '};d;:b' -e 'p;n;bb' infile

どちらの場合も出力:

dove
bird
bunny
gnu
hen
dove
bird
buffalo

おすすめ記事