Linuxシェルでファイルの中身の一部を書き換えるsed

Linuxのシェル上でファイルの一部を書き換えたいときがあります。
たとえば、設定ファイルを書き換えるシェルスクリプトを作りたい、など。

テキスト変換コマンドsed

sedは、stream editorの略で、入力されたテキストに何かしらの変換をかけて出力するコマンドです。
テキトーにfruitsなどというテキストファイルを作っておきます。

$ cat << 'EOT' >> fruits
> apple
> banana
> orange
> grape
> EOT

中身を表示してみます。フルーツ盛り合わせです。

$ cat fruits
apple
banana
orange
grape

中身をsedに渡して、バナナをバナナジュースにします。

$ cat fruits | sed "s/banana/banana juice/"
apple
banana juice
orange
grape

bananaの部分がbanana juiceになって表示されました!でも、まだ保存はされていません。

リダイレクトで保存

テキストの変換はできたので、あとは元のファイルに保存しなおせば完了です。

$ cat fruits | sed "s/banana/banana juice/" > fruits
$ cat fruits
apple
banana juice
orange
grape

バナナジュースができました!

もう少し短く書く

sedコマンドは標準入力から文字列を受け取ることもできますし、パラメータで指定されたファイルからテキストを呼んで処理することもできます。

sed -e "s/banana/banana juice/" fruits > fruits

これでも同じようにバナナジュースができます!

コメント

タイトルとURLをコピーしました