Bash の sed コマンド
sed
コマンドは、置換の概念に基づいて動作するストリーミングテキストエディタです。
これは、ファイルフラグメントの検出、挿入、置換、および削除に使用されます。このプログラムを使用すると、ファイルを開かなくてもファイルを変更できます。
このチュートリアルでは、sed
Linux プログラムの基本、その構文、およびファイルの検索と置換に直接使用される正規表現の構文について説明します。
Bash sed
構文
sed
は、標準の入力またはファイルからのテキストストリームを処理するためによく使用されます。これは、別のコマンドの出力をユーティリティの入力に直接渡して編集したり、すでに作成されているファイルを操作したりできることを意味します。
デフォルトでは、すべての結果は標準出力に送信されます。つまり、リダイレクトされるまでファイルに保存されるのではなく、画面に表示されます。
コマンド構文は次のとおりです。
$ sed [options] commands [file-to-edit]
file-to-edit
はファイルの場所を示し、options
は指定されたファイルを操作する際のルールを示します。そして、ここにその主要なオプションのいくつかがあります:
-n, -quiet
:各反復の後、テンプレートバッファの内容を出力しません。-e
:編集のために実行するコマンド。-f
:ファイルから編集コマンドを読み取ります。-i
:編集する前にファイルのバックアップコピーを作成します。-l
:行の長さを設定できます。-r
:拡張正規表現構文のサポートを有効にします。-s
:複数のファイルを転送する場合、それらを 1つの長いストリームではなく、個別のストリームと見なします。
Bash sed
の例
demosed.txt
という名前のファイルを作成し、次の内容でホームディレクトリに保存しました。
ホームディレクトリのファイル demosed.txt
の 1 行目から 5 行目を表示することから始めます。
これを行うには、p
コマンドを使用します。-n
オプションを使用して、各反復でテンプレートバッファーの内容全体ではなく、必要なものを出力します。
$ sed -n '1,5p' demosed.txt
出力:
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
ファイル全体(1 行目から 10 行目を除く)を出力するには:
$ sed '1,10d' demosed.txt
テキストを削除するには、p
コマンドの代わりに d
を使用します。この場合、ユーティリティは delete コマンドを使用したときに消去されないものをすべて表示するため、-n
オプションを使用してすべてを表示しませんでしたが、代わりに d
コマンドを使用して不要なものをクリアしました。
出力:
This is the eleventh line.
This is the twelveth line.
This is the thirteenth line.
This is the fifteenth line.
予想どおり、11〜15 行のみが出力されます。
demosed.txt
を開くと、前のコマンドを実行したときと同じコマンドが表示されます。
セキュリティ上の懸念から、sed
はデフォルトでソースファイルを変更しません。edit in place
を意味する -i
オプションは、元のファイルを改ざんするために使用できます。
ファイルから 14 行目を削除するには:
$ sed -i '13~15d' demosed.txt
上記のコマンドは何も出力しません。ファイル内の内容を見てみましょう。
以前のバージョンのファイルと比較すると、14 行目に This is thirteenth line.
というテキストが抜けていることがわかります。
正規表現は、options
を使用して sed
で使用することもできます。例を見てみましょう。
$ sed '/^nine\|^$\| *nine/d' demosed.txt
出力:
This is the first line.
This is the second line.
This is the third line.
This is the fourth line.
This is the fifth line.
This is the sixth line.
This is the seventh line.
This is the eighth line.
This is the tenth line.
This is the eleventh line.
This is the twelveth line.
This is the fifteenth line.
'/^nine\|^$\| *nine/'
は、単語 nine
を含む文を検出する正規表現操作です。上記のコマンドは、 -i
を使用していないため、元のファイルを改ざんすることはありませんが、nine
の行が除外されていることがわかります。