Lから始まるLinux

2章55話
grepコマンド
2章56話 sedコマンド
もくじ
2章57話
awkコマンド
sed コマンド
若木 みどり
お兄ちゃんから 正規表現を使ったコマンドを 教えてもらっているんだよ! 前回は grep だったね
若木 しげる
今回は sed 扱ってみよう!
使い方
若木 しげる
sed 「ストリームエディタ(stream editor)」の略で 入力を一括で編集するためのコマンドなんだ 編集後の内容は標準出力へ出力されるよ
若木 みどり
エディタなんだ!
若木 しげる
そう! エディタなので色々な編集ができるんだ 全部の機能を一度には覚えられないので 今回はよく使われる 「置換コマンド s (substitute) 」 を覚えよう! 以下のように使用するよ
sed [オプション]... 's/置換前/置換後/フラグ' ファイル
オプション役割
-i [extension]編集結果を標準出力ではなく編集対象ファイルに書き出す。extention を指定すると ファイル名extension というファイル名で編集前のバックアップを作成する
若木 しげる
ファイルの各行で最初に見つかった 置換前置換後 に置き換えた内容を出力するんだ
若木 みどり
置換前 の指定に正規表現が使えるんだね!
若木 しげる
「フラグ」g だけ覚えよう最初に見つかったものだけなく全ての 置換前置換後 に変更するよ
実践
若木 しげる
では実際の例を見てみようsed で前回扱った/etc/passwd を加工してみよう
若木 みどり
情報が : 区切りになっていて最初がユーザ名だったよね!
若木 しげる
そのことを知っていれば以下のようにすることで全ユーザを列挙できるんだ
sed 's/:.*//' /etc/passwd
若木 みどり
どんな結果になるのかな?
root
bin
...
shigeru
midori
若木 みどり
区切り文字 :その後に続く任意の文字列 .*空っぽに置き換える…つまり削除するんだね!
若木 しげる
そういうことだねこれでユーザ名一覧を取り出しているんだ
区切り文字を変える
若木 みどり
「置換前」「置換後」の指定に「スラッシュ(/)」含まれていたらどうすればいいのかな?例えばパスとかはたくさん含まれるんだけど…
若木 しげる
実は s の直後に来る文字が置換操作の区切り文字になるんだなので以下のように別の区切り文字を使えるよ
sed \
    's%/home/shigeru%/home/midori%g' \
    <<< /home/shigeru/diary
若木 みどり
なるほど!この例では %区切りに使っているんだね!普段は「スラッシュ(/)」だけど不都合なときは別の文字を使ってもいいんだ!
まとめ
若木 みどり
今回は sed のうち置換の方法を学んだよ!
若木 しげる
sed では置換以外にも多くの編集操作が用意されているよ大抵のテキスト処理はsed だけでできてしまう万能コマンドなんだ