sedコマンドの基本

Linux/UNIXで使用されるsedコマンドの基本をまとめました。

sedとは

StreamEDitorの略です。
簡単にいうと入力内容(ファイル/パイプ)のはじめから見ていき指定された
パターン(文字列)が出てきたら変換して出力するコマンドです。

基本的な使い方

以下のinput.txtのようなテキストファイルがあるとします。
sedコマンドで 「abc」を「XXX」に変換してくれます。

$ cat input.txt
abc def ghi
jkl mno pqr
stu vwx yz
$ sed 's/abc/XXX/' input.txt
XXX def ghi
jkl mno pqr
stu vwx yz
$

複数のパターンを変換したい

「abc」を「XXX」にして、「mno」を「YYY」にしたい場合、
「-e」オプションを指定して変換したいパターンを並べます。

$ cat input.txt
abc def ghi
jkl mno pqr
stu vwx yz
$ sed -e 's/abc/XXX/' -e 's/mno/YYY/' input.txt
XXX def ghi
jkl YYY pqr
stu vwx yz
$

変換したいパターンが一つであれば、「-e」は指定しなくてもよいですが、複数ある
場合は、指定する必要があります。「-e」をつけないとエラーとなります。

変換したいパターンがいっぱいある

変換したいパターンが数個であれば「-e」オプションで並べればよいですが、10個も
20個もある場合、パターンをファイルに書き「-f」オプションを使います。

$ cat input.txt
abc def ghi
jkl mno pqr
stu vwx yz
$ cat manypattern.sed
s/abc/XXX/
s/mno/YYY/
s/yz/ZZZ/
$ sed -f manypattern.sed input.txt
XXX def ghi
jkl YYY pqr
stu vwx ZZZ
$

「g」あり、なしの違い

パターンに「g」を付けたとき付けない時の違いは、一行に複数変換したい文字が
出てきたときに変換するしないの違いです。

$ cat input2.txt
abc def ghi
jkl mno jkl
stu vwx yz
$ sed 's/jkl/XXX/' input2.txt
abc def ghi
XXX mno jkl
stu vwx yz
$ sed 's/jkl/XXX/g' input2.txt
abc def ghi
XXX mno XXX
stu vwx yz
$

「g」を付けない場合、一行の初めに出てきた文字のみしか変換されませんが、
「g」をつければ全部変換されます。

あるコマンドの結果を変換したい

lsコマンドの結果を変換したいなどの場合、パイプライン入力で変換もできます。

$ ls -1
abc.doc
cde.doc
fgh.doc
$ ls -1 | sed 's/doc/txt/'
abc.txt
cde.txt
fgh.txt
$

確認環境

  • OS: CentOS 5.2
  • sed: 4.1.5

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-10 (火) 16:28:06 (3444d)