3.4 よく使うコマンド
sedを使うなら、おそらくこれらのコマンドを知りたくなるでしょう。
#[アドレスは指定できません。]
#文字でコメントが始まり、次の改行まで続きます。移植性を気にする場合は、一部の
sed実装(POSIXに準拠しないもの)が、スクリプトの最初の文字が#である場合に限り、1行のコメント一つだけをサポートすることがある点に注意してください。警告:
sedスクリプトの最初の2文字が#nの場合、-n(自動表示なし)オプションが強制されます。スクリプトの先頭行に文字「n」で始まるコメントを書き、この動作を避けたい場合は、大文字の「N」を使うか、「n」の前に少なくとも一つの空白を置いてください。-
q [exit-code] これ以上コマンドや入力を処理せず、
sedを終了します。例:2行目を表示した後に停止します。
$ seq 3 | sed 2q 1 2
このコマンドにはアドレスを一つだけ指定できます。-nオプションで自動表示を無効にしていなければ、現在のパターンスペースが表示されることに注意してください。
sedスクリプトから終了コードを返す機能はGNUsed拡張です。現在のパターンスペースを表示せず、出力なしで終了するGNU
sed拡張のQコマンドも参照してください。-
d パターンスペースを削除し、直ちに次のサイクルを開始します。
例:入力の2行目を削除します。
$ seq 3 | sed 2d 1 3
-
p パターンスペースを標準出力へ表示します。このコマンドは、通常、コマンドラインオプション-nと併用します。
例:入力の2行目だけを表示します。
$ seq 3 | sed -n 2p 2
-
n 自動表示が無効になっていなければ、パターンスペースを表示します。その後、自動表示の設定にかかわらず、パターンスペースを次の入力行で置き換えます。入力がもうなければ、
sedは残りのコマンドを処理せず終了します。このコマンドは、行を飛ばす場合(たとえばN行ごとに処理する場合)に役立ちます。
例:3行ごとに置換を行います。二つの
nコマンドで2行を飛ばします。$ seq 6 | sed 'n;n;s/./x/' 1 2 x 4 5 x
GNU
sedには、同じ結果を得るための拡張アドレス構文first~stepがあります。$ seq 6 | sed '0~3s/./x/' 1 2 x 4 5 x
-
{ commands } {文字と}文字の間に、コマンドのグループを囲めます。単一のアドレス(またはアドレス範囲)への一致で、一連のコマンドを実行したい場合に特に役立ちます。例:入力の2行目で置換を行い、その後で表示します。
$ seq 3 | sed -n '2{s/2/X/ ; p}' X