linux note
     linuxのコマンドがカテゴリ別の一覧で確認できます。



 

Linux Note(トップページ) > テキスト操作 > 高度なテキスト操作 > sed コマンド







[Note] sed コマンド

sedとはStream Editor の略です。sedコマンドはテキストストリームに対して編集等を行います。このコマンドは、とても便利なコマンドです。テキストファイルから特定のパターンにマッチした行のみ取り出したり、正規表現で一括置換したりなどの操作が簡単にできます。しかしながら、実際の操作は例文を見ないとイメージできないと思いますので、以下にいくつかサンプルをしめします。

次の例ではtest.csvというファイルの1行目~3行目までをdコマンドで削除しています。

 $ sed ’1,3d’ test.csv

ただし、sedコマンドは、基本的に標準出力に結果を表示するだけですので、この結果を保存したい場合は、リダイレクトを使用して以下のようにする必要があります。

 $ sed ’1,3d’ test.csv > test2.csv

また、特定のパターンにマッチする部分を一括置換したい場合にはsコマンドを使用します。
「s/検索パターン/置換パターン/」のように指定します。次の例では「linux」という文字列を「server」に置換しています。

 $ sed s/linux/server/ test.csv

またsコマンドでは、検索パターンにマッチする部分が1行に複数あても、マッチした箇所の先頭しか置換しません。マッチした全ての箇所を置換するには、以下のようにgスイッチを追加します。

 $ sed s/linux/server/g test.csv

さらにsedコマンドでは、正規表現を用いることが可能です。簡単な例だけしましておきます。以下ではテキストファイルの1行目から5行目までの先頭に#を挿入しています。

 $ sed ’1,5s/^/#/g’ test.csv

「^」が「行の先頭」を示す正規表現です。また、シングルコーテーションで囲っているのはシェルにコマンドやファイル名の区切りを正確に認識させる為で、正規表現などを使った場合は、明示的に区切っておいた方が間違いがないと思われます。

複数の文字を一度に置換することもできます。この場合yコマンドを用います。次の例では「x」→「a」、「y」→「b」、「z」→「c」を同時に置換しています。

 $ sed y/xyz/abc test.csv

このyをsに変えると「xyz」→「abc」の置換になることに注意してください。

sedコマンドで処理したいケースは、バリエーションが非常に多いので紹介しきれませんが、もう1つ応用例を示しておきます。

 $ sed ‘s/[^0-9]//g’ test.csv

上記では、0~9の数値以外の文字列を削除しています。[^0-9]の「^」は先頭ではなく「0~9以外」という正規表現です。その直後のスラッシュの後に何も記載していないのは、削除という意味になっています。
これ以外にもsedコマンドは様々な使い方が可能で、linuxエンジニアはコマンドラインから即座にテキストファイルを処理する場合に使用しています。

それから、sedでの処理内容のコマンド等をテキストファイルにあらかじめ記載しておいて実行することも可能です。つまり、頻繁に使うパターンをファイルにストックしておくことができます。コマンド等を記載したファイルを呼び出す場合には、以下のようにオプション「-f」を用います。

 $cat testcommand
 s/linux/LINUX/g

 $ sed -f testcommand test.csv

また、以下に代表的なオプションとコマンドを示しておきます。


オプション(コマンド)
機能の説明
 -e
次の引数はコマンドと認識する
 -f
次の引数はスクリプトファイルと認識する
 d
マッチした行を削除する
 s
パターンに基づいて置換。gスイッチを使うと、マッチした箇所全てを置換
 y
指定された文字を1文字ずつ対応させて置換




[ カテゴリ一覧 ]

 |  エディタ  |  システム管理  |  テキスト操作  |  ファイルシステム  |  ファイル操作  | 
 |  ファイル管理  |  ユーザーやグループの管理  |