Unix command > sed

更新日 2014-01-23
広告
sedを使うと、正規表現を使用して強力な置換処理を行えます。 ファイル test.txt 中の最初の'foo'を、'bar'に置換する例は以下のとおり。
$ sed -e 's/foo/bar/' test.txt
最初だけじゃなくて、全部置換する場合は、以下のとおり(最後に g を付ける)。
$ sed -e 's/foo/bar/g' test.txt
英数字で囲まれた全角ハイフンを、半角ハイフンに変換する例は、以下のとおり。
sed -e 's/\([a-zA-Z0-9]\)ー\([a-zA-Z0-9]\)/\1-\2/g'
バックスラッシュ付きのカッコで囲んだ正規表現にマッチした文字列は、変数に保存されます。 例えば、上記の場合、'[a-zA-Z0-9]'という正規表現(つまり英数字)をカッコで囲んでいます。 その次に全角ハイフンで、その次にまた'[a-zA-Z0-9]'をカッコで囲んでいます。 それぞれのカッコにマッチした文字列は \1 や \2 という変数で参照できます。

ファイルを直接置換

-iオプションを使うと、ファイルの内容を置換できます。 以下は、Linuxの場合の例です。
# Linux
$ sed -i'.bak' -e 's/aaa/bbb/g' test.txt 

-i のすぐ後にシングルクォーテーションを続けてください。 この場合、バックアップファイルとしてtest.txt.bak が作られ、test.txtの内容が置換されます。

バックアップファイルを作りたくなければ、以下のように-iで空文字を指定します。 ただし、バックアップファイルを作らずに-iオプションを使うことは、sedコマンドのマニュアルでは推奨されていません。

# Linux
$ sed -i'' -e 's/aaa/bbb/g' test.txt 
Macの場合は、-iの使い方が少し違います。
# Mac
$ sed -i '.bak' -e 's/aaa/bbb/g' test.txt 
このように、Macの場合は、-i の後にスペースが必要です。 バックアップファイルを作りたくない場合は、以下のようにします。
# Mac
$ sed -i '' -e 's/aaa/bbb/g' test.txt 
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system