以下はTERMINATE、ファイルの最後まで一致する行を出力します。
sed -n -e '/TERMINATE/,$p'
説明: -nの無効のデフォルト動作sedそれにそのスクリプトを実行した後、各ラインを印刷するの、-eとスクリプトを示しsed、/TERMINATE/,$一致する最初の行を意味アドレス(ライン)の範囲の選択ですTERMINATE(ファイルの末尾に(grepのような)正規表現を$) 、およびp現在の行を印刷する印刷コマンドです。
これは、一致する行に続く行
からTERMINATEファイルの最後まで印刷します
(一致する行の後から一致する行を除く、一致する行の後)。
sed -e '1,/TERMINATE/d'
説明: 正規表現に1,/TERMINATE/一致する最初の行への入力の最初の行を意味するアドレス(行)範囲選択であり、現在の行を削除して次の行にスキップする削除コマンドです。デフォルトの動作は、ラインを印刷することで、それが後の行を出力します 入力の最後に。TERMINATEdsedTERMINATE
編集:
前の行が必要な場合TERMINATE:
sed -e '/TERMINATE/,$d'
またTERMINATE、1つのパスで2つの異なるファイルの前後の両方の行が必要な場合:
sed -e '1,/TERMINATE/w before
/TERMINATE/,$w after' file
beforeおよびafterファイルには、terminateを含む行が含まれるため、それぞれを処理するには、次のように使用する必要があります。
head -n -1 before
tail -n +2 after
Edit2:
sedスクリプトでファイル名をハードコーディングしたくない場合は、次のことができます。
before=before.txt
after=after.txt
sed -e "1,/TERMINATE/w $before
/TERMINATE/,\$w $after" file
ただし$、最後の行の意味をエスケープして、シェルが$w変数を展開しようとしないようにする必要があります(スクリプトの前後に一重引用符ではなく二重引用符を使用していることに注意してください)。
sedがファイル名の終わりを知るために、スクリプトのファイル名の後に新しい行が重要であることを伝えるのを忘れていました。
編集: 2016-0530
セバスチャンクレメントは、「ハードコードTERMINATEされた変数をどのように変数で置き換えますか?」
一致するテキストの変数を作成し、前の例と同じ方法で行います。
matchtext=TERMINATE
before=before.txt
after=after.txt
sed -e "1,/$matchtext/w $before
/$matchtext/,\$w $after" file
前の例で一致するテキストに変数を使用するには:
## Print the line containing the matching text, till the end of the file:
## (from the matching line to EOF, including the matching line)
matchtext=TERMINATE
sed -n -e "/$matchtext/,\$p"
## Print from the line that follows the line containing the
## matching text, till the end of the file:
## (from AFTER the matching line to EOF, NOT including the matching line)
matchtext=TERMINATE
sed -e "1,/$matchtext/d"
## Print all the lines before the line containing the matching text:
## (from line-1 to BEFORE the matching line, NOT including the matching line)
matchtext=TERMINATE
sed -e "/$matchtext/,\$d"
これらの場合にテキストを変数に置き換えることに関する重要なポイントは次のとおりです。
- 変数(
$variablename)で囲まれたsingle quotes[ ']「を展開」しませんが、変数内のdouble quotes[ "]になります。だから、あなたはすべて変更する必要single quotesにdouble quotes変数に置き換えるテキストが含まれ場合は、する必要があります。
sed範囲も含まれてい$て、すぐのような文字が続いています:$p、$d、$w。あなたはこれらのエスケープする必要がありますので彼らはまた、拡大する変数のようになります。$バックスラッシュで文字を[ \よう]: 、\$p、。\$d\$w
grep 'TERMINATE' file