sedとはStream Editor の略です。sedコマンドはテキストストリームに対して編集等を行います。このコマンドは、とても便利なコマンドです。テキストファイルから特定のパターンにマッチした行のみ取り出したり、正規表現で一括置換したりなどの操作が簡単にできます。しかしながら、実際の操作は例文を見ないとイメージできないと思いますので、以下にいくつかサンプルをしめします。
次の例ではtest.csvというファイルの1行目~3行目までをdコマンドで削除しています。
ただし、sedコマンドは、基本的に標準出力に結果を表示するだけですので、この結果を保存したい場合は、リダイレクトを使用して以下のようにする必要があります。
また、特定のパターンにマッチする部分を一括置換したい場合にはsコマンドを使用します。
「s/検索パターン/置換パターン/」のように指定します。次の例では「linux」という文字列を「server」に置換しています。
またsコマンドでは、検索パターンにマッチする部分が1行に複数あても、マッチした箇所の先頭しか置換しません。マッチした全ての箇所を置換するには、以下のようにgスイッチを追加します。
さらにsedコマンドでは、正規表現を用いることが可能です。簡単な例だけしましておきます。以下ではテキストファイルの1行目から5行目までの先頭に#を挿入しています。
「^」が「行の先頭」を示す正規表現です。また、シングルコーテーションで囲っているのはシェルにコマンドやファイル名の区切りを正確に認識させる為で、正規表現などを使った場合は、明示的に区切っておいた方が間違いがないと思われます。
複数の文字を一度に置換することもできます。この場合yコマンドを用います。次の例では「x」→「a」、「y」→「b」、「z」→「c」を同時に置換しています。
このyをsに変えると「xyz」→「abc」の置換になることに注意してください。
sedコマンドで処理したいケースは、バリエーションが非常に多いので紹介しきれませんが、もう1つ応用例を示しておきます。
上記では、0~9の数値以外の文字列を削除しています。[^0-9]の「^」は先頭ではなく「0~9以外」という正規表現です。その直後のスラッシュの後に何も記載していないのは、削除という意味になっています。
これ以外にもsedコマンドは様々な使い方が可能で、linuxエンジニアはコマンドラインから即座にテキストファイルを処理する場合に使用しています。
それから、sedでの処理内容のコマンド等をテキストファイルにあらかじめ記載しておいて実行することも可能です。つまり、頻繁に使うパターンをファイルにストックしておくことができます。コマンド等を記載したファイルを呼び出す場合には、以下のようにオプション「-f」を用います。
s/linux/LINUX/g
$ sed -f testcommand test.csv
また、以下に代表的なオプションとコマンドを示しておきます。