本文へスキップ
BecomeCoder

Linuxコマンドコース · 第6章 自動化とシェルスクリプト · レッスン31

sed ― 流れるテキストを置き換える

ブラウザで完結

導入

grep が「探す」道具なら、sed(stream editor)は「書き換える」道具です。ファイルを開いて手で直すのではなく、流れてくる各行を自動で変換 します。設定ファイルの一括置換やログの整形など、現場の定番中の定番です。

説明

sed は入力を1行ずつ受け取り、指定した編集を施して 出力します。いちばん使うのが置換 s/古い/新しい/ です。

flowchart LR
    IN["入力の各行"] --> SED["sed 's/古い/新しい/'"] --> OUT["置換された各行"]

data.csv の「東京」を「TOKYO」に置き換えてみましょう。末尾の g(global)は「行内のすべて」を意味します(付けないと各行の最初の1個だけ)。

sed 's/東京/TOKYO/g' data.csv

元のファイルは変わりません。sed画面に結果を出すだけ なのが安全なところです(保存したいときは > で別ファイルへ)。

行を 消す には d(delete)を使います。アドレス(対象の指定)と組み合わせるのが強力で、/ERROR/d は「ERROR を含む行を消す」です。

sed '/ERROR/d' logs/app.log

特定の行だけを 抜き出す なら、-n(自動表示をやめる)と p(print)を組みます。2p は「2行目だけ」。

sed -n '2p' data.csv

もちろんパイプの途中にも置けます。grep で絞ってから sed で整える、が黄金パターンです。

cat data.csv | sed 's/,/ | /g'

やってみよう

sed 's/東京/TOKYO/g' data.csv で東京がすべて置き換わること、そして元の data.csvcat data.csv で見ると無傷なことを確かめましょう。sed '/ERROR/d' logs/app.log でエラー行だけ消える、sed -n '2p' data.csv で2行目だけ出る、も試してください。

演習

data.csv の中の「大阪」をすべて「OSAKA」に置き換えて表示してください。

ヒント1を見る

置換は s/古い/新しい/、すべて置き換えるには末尾に g です。

ヒント2を見る

sed 's/大阪/OSAKA/g' data.csv

実際に動かしてみよう

下の端末にコマンドを打って Enter を押すと、その場で結果が返ります。本文で出てきたコマンドを実際に試しながら進めましょう(ファイルを消しても「最初からやり直す」で元に戻ります)。

Linux シェル(シミュレート)

ブラウザ内でコマンドを試せる仮想シェルを読み込みます(本物のLinuxカーネルではなく学習用の再現です)。
スクロールして表示された時点でも自動で読み込まれます。