これを行うための簡単なスクリプトを作成することはできますが、unix に慣れるための進行中の探求の中で、代わりに組み込みコマンドを使用して効率的な方法を学びたいと考えています。
可変数のヘッダー行を持つ非常に大きなファイルを処理する必要があります。最後のヘッダー行は、テキスト「LastHeaderLine」で構成されます。この行以降をすべて出力したい。(偽陽性の一致については心配していません。)
これを行うための簡単なスクリプトを作成することはできますが、unix に慣れるための進行中の探求の中で、代わりに組み込みコマンドを使用して効率的な方法を学びたいと考えています。
可変数のヘッダー行を持つ非常に大きなファイルを処理する必要があります。最後のヘッダー行は、テキスト「LastHeaderLine」で構成されます。この行以降をすべて出力したい。(偽陽性の一致については心配していません。)
Aviの回答に似ていますが、「LastHeaderLine」の行は含めません。
sed -e '1,/LastHeaderLine/d'
このためにawkを試してみませんか?次のようになります。
awk 'NR == 1, /LastHeaderLine/ { next } { print }' myinputfile > myoutputfile
ここで、NR == 1は最初の行に当てはまり、/LastHeaderLine/は最後のヘッダー行に一致します。コンマ演算子により、次の関数{ next }が 2 つの正規表現の範囲内のすべての文に対して起動されます。この場合、それ以上の操作なしで入力の次の行にスキップします。他のすべての入力行については、行を標準出力に出力します。これは、> を使用してリダイレクトできます。
sed を使用:
sed -ne '/LastHeaderLine/,$p' <inputfile
正規表現の一致からファイルの末尾まですべてに一致します。'p' は一致する行を出力します。
編集:
よく考えてみると、LastHeaderLine に一致する行を印刷したくありません。これは sed では困難です。perl では、次のことができます。
perl -ne 'if ($flag) {print;} if (/LastHeaderFile/) {$flag=1;}' <inputfile
これにより、正規表現の一致に厳密に従っている行のみが出力されます。