ゴール
ワンライナーで使えそうなsed技術を身につける
基礎学習
sed入門 - ドットインストール
http://dotinstall.com/lessons/basic_sed/
sedの基本フォーマット
sed [option] command
- sed -e 's/old/new/g'みたいな感じで置換すると思うが's/old/new/g'部分がまさにコマンド部分
- /を区切り文字に使う必要はない(\又は改行以外なら使えるっぽい)
- パスを置換するような時に/以外を区切り文字に使う事でエスケープの手間を省ける
- commandには置換のsコマンド以外にも色々ある
使いそうなオプション
オプション | 説明 |
---|---|
-i[拡張子] | sedによって加工した変更を入力ファイルに反映する. -iがない場合は標準出力に書かれる.拡張子を指定すると指定した拡張子でバックアップをとっておける |
-E又は-r | 拡張正規表現を使用する |
使いそうなコマンド
コマンド | 説明 |
---|---|
s | 文字列の置換 |
y | 文字の置換 |
d | 文字の削除 |
i | 文字列の挿入 |
- その他にも色々ある
コマンド使用例
- yによる文字の置換
$ cat alpha.txt
abcdefg
hijklmn
opqrstu
vwxyz
$ sed 'y/az/AZ/' alpha.txt
Abcdefg
hijklmn
opqrstu
vwxyZ
- dによる列削除
# 3行目だけを削除
$ sed '3d' alpha.txt
abcdefg
hijklmn
vwxyz
アドレス機能
- アドレスを使ってコマンドの操作対象を指定できる
- 指定しなければ全ての行に対してコマンドが作用する
# 3行目だけを削除
$ sed '3d' alpha.txt
abcdefg
hijklmn
vwxyz
- $は最後の行を表す
- !は指定したアドレス以外にコマンドを実行する際に利用する
# 3行目以外を削除
$ sed '3!d' alpha.txt
opqrstu
正規表現にマッチした部分を参照する
- &は正規表現にマッチした部分全体として参照出来る
$ echo 1236 | sed -E 's/[1-3]+/[&]/g'
[123]6
- &を二つ使ったりも出来る
$ echo 1236 | sed -E 's/[1-3]+/[&][&]/g'
[123][123]6
- 正規表現にマッチした一部分を\1, \2といった形で参照出来る
echo 123678 | sed -E 's/([1-3]+)([6-8]+)/[\1][\2]/g'
[123][678]
手を動かす
sedに限ったものではないけど、演習問題が沢山あるので手を動かす題材に使える
シェル芸勉強会スライド一覧 - 上田ブログ
こんな時どう書くか
特定の範囲の行を削除する
$ sed '2,3 d' alpha.txt
abcdefg
vwxyz
特定のパターンにマッチする行を削除する
$ sed '/^hij/ d' alpha.txt
abcdefg
opqrstu
vwxyz
- sed力があがったらまた追加する
引用/参考URL
共通テーマ: 実例でわかる sed 第 1 回
共通テーマ: 実例でわかる sed 第 2 回
SED マニュアルページ
sed コマンド
Sed - An Introduction and Tutorial by Bruce Barnett
シェル芸勉強会スライド一覧 - 上田ブログ