echoer
画面に多くの情報を印刷するスクリプト(と呼びます)があります。パターンを見つけた後に線を見ることができるようにしたいと思います。
私は使用するソリューションが次のようになると想像しています。
echoer | solution_command <pattern>
理想的にはpattern
正規表現ですが、ハード値文字列で十分です。
答え1
AWKは、正規表現を使用できるパターン範囲を使用してこれを実行できます。
echoer | awk '/pattern/,0'
echoer
出力は一致する最初の行から印刷されますpattern
。
AWKはパターンベースであり、通常、「このパターンが一致した場合は次のようにします」タイプのメソッドで使用されます。 「このパターン」は、「このパターンが一致すると、他のパターンが一致するまでこれを開始します」と定義された一連のパターンです。これは、上記のようにコンマで区切られた2つのパターンを作成することによって指定されます。パターンは、のようにテキストマッチングにすることができます。ここで、/pattern/
現在の行は正規表現として解釈され、一般式でもあります。これは各行について評価され、結果が一致しないと見なされます。 0または空ではありません。
AWKでは、基本的な作業は現在の行を印刷することです。
これらすべてをまとめると、awk '/pattern/,0'
一致する行を見つけ、pattern
見つかったら、条件が0
一致するまで(ゼロ以外)、デフォルトの操作がすべての行に適用されます。awk '/pattern/,""'
動作します。
これゴークマニュアル詳細については。
答え2
sed
@StephenKittのものと強制的に同じですawk
:
sed '/pattern/,$!d'
pattern
次のように解釈されました。基本正規表現grep
(代わりに拡張正規表現存在するawk
/ egrep
/ grep -E
)。いくつかのsed
実装には-E
(BSD、ast、最近のGNU / busybox、まもなくPOSIX)または-r
(GNU、ssed、busybox、最近のBSD)オプションがあります。拡張正規表現代わりに、いくつかは-P
(ast)または-R
(ssed)を使用してPerlなどの正規表現を作成します。
そしてperl
:
perl -ne 'print if /pattern/ .. undef'
答え3
GNU および *BSD grep の使用:
grep -A1000000000 pattern file
ファイルが1M行を超えない限り、それはすべてです。
答え4
awk
最初のパターンマッチの後の行(含まない)
トリガーパターンを含む行が「CUT HERE」と等しい場合は、印刷出力から省略できます。
echoer | awk 'flag ; /pattern/ { flag=1 }'
各入力行は awk コードの 2 つのコンポーネントを通過します。最初のコンポーネントは、flag
awkが「flag
変数がゼロでない場合はこの行を印刷します」と解釈されます。 awk変数のデフォルト値は0なので、最初は何も印刷されません。
2番目のコンポーネント/pattern/ { flag=1 }
はパターンを検出するとすぐにフラグを1に設定し、フラグは残りの実行中にその値を保持します。
パターンが初めて検出されると、その入力行を印刷する機会がありました。その後のすべての行(パターンを含む他の行を含む)が印刷されます。