sed - テキストを置換や編集をする

sedコマンドの-nオプションがない場合、sedコマンドは、スクリプトの最後にパターンスペースを自動的に表示します。
sedコマンドに-nオプションをつけることで、この自動表示をオフに切り替えることができます。
スクリプトの都合によっては、-nオプションを付けた場合の方が良いときもあります。

また、sedコマンドはsコマンドのほかに、パターンスペースを表示するpコマンドや行を削除するdコマンドもよく使うコマンドになります。

コマンド例の想定

コマンドの例として、以下のような「apple」、「onion」、「yuzu」の重複順列でできたテキストファイルを想定します。

itemtext.txt ▼表示

また、sedコマンドのスクリプトが書かれたファイルをscript.sedとします。

-nオプションについて

sedコマンドは、デフォルトではスクリプトの最後にパターンスペースを自動的に表示します。
-nオプションは、この自動表示をオフにします。
パターンスペースは、スクリプトでpコマンド等を明示的に記述しない限り、表示されなくなります。

目的によっては、デフォルトの自動表示が不必要になる場合があります。
そんな時に、sedコマンドの-nオプションを覚えておくと便利です。

スクリプトの複数コマンドを実行(-eオプション等)

スクリプトの複数コマンドを記述するには、様々な方法があります。
itemtext.txtの最初の行と最後の行を表示する例を出して、説明します。

itemtext.txt ▼表示

複数の-eオプションで記述

複数の-eオプションを使用することで、スクリプトの複数コマンドを記述することができます。
また、スクリプトのコマンドは、-eオプションが記述された順番で実行されます。

コマンド例

実行結果

コマンドを ; で区切って記述

スクリプトのコマンドを;で区切って記述することで複数のコマンドを実行させることができます。

コマンド例

実行結果

ファイルに記述

スクリプトをファイルに記述することで、複数のコマンドを実行させることができます。

コマンド例

script.sed

実行結果

記述方法としては、;で複数のコマンドを記述したほうがタイピング量も見栄えも良いと思います。
しかし、使い方によっては、ほかの方法も使用することがあると思います。

また、-eオプションと-fオプションを同時に使用した場合の結果は以下の通りになります。

コマンド例

script.sed

実行結果

-fオプションと-eオプションの順番を入れ替えた場合は以下の通りです。

コマンド例

実行結果

この結果から、初めに呼ばれた-eオプションまたは-fオプションでのスクリプトを読み込み、その後に次の-eオプションまたは-fオプションでのスクリプトを読み込み、実行させることがわかります。

文字を入れ替える(yコマンド)

yコマンドは、文字を別の文字に入れ替えることができます。
yコマンドは、y/変換前の文字/変換後の文字/で記述します
コマンド例

script.sed

itemtext.txt ▼表示

実行結果

パターンスペースを表示(pコマンド)

pコマンドは、パターンスペースを表示することができます。
また、よく使うコマンドのひとつです。

コマンド例

script.sed

itemtext.txt ▼表示

実行結果

パターンスペースを削除(dコマンド)

dコマンドは、パターンスペースを削除することできます。
dコマンドを使った場合、その後にスクリプトが続いていても、次のサイクルに移行します。
また、dコマンドもよく使うコマンドのひとつです。

コマンド例

script.sed

itemtext.txt ▼表示

実行結果

スクリプトを終了(qコマンド)

qコマンドは、スクリプトを終了させることができます。
その後のスクリプトは実行されません。
また、qコマンドの後にexitコードをつけることができます。

コマンド例

script.sed

itemtext.txt ▼表示

実行結果

exitコードをつけると、終了ステータスがそのexitコードになります。
コマンド例

終了ステータスの確認

パターンスペースを次の行に飛ばす(nコマンド)

nコマンドは、sedコマンドに-nオプションがない場合は、現在のパターンスペースを表示して次のスクリプトのコマンドを実行します。
-nオプションがある場合、パターンスペースが次の行になります。

-nオプションがない例

3の倍数の行をdeleteという単語に書き換える例です。

コマンド例

itemtext.txt ▼表示

実行結果 ▼表示

-nオプションがある場合の例

3の倍数の行を表示する例です。

コマンド例

itemtext.txt ▼表示

実行結果

コマンドをグループ化する

コマンドのグループ化は、アドレスを指定して複数のコマンドを使用する場合に便利です。

コマンド例

script.sed

itemtext.txt ▼表示

実行結果