sedのお勉強1

sedは奥が深いデスネ。。いっつもsed&awk特集でsedはちょこっとawkどっさりなイメージがあるけれど、あらためてsedを見てみた。

sedはtextを1行ずつ読み込んで処理する。読み込んだ1行を保持するのがパターンスペースで、明示的に保持しておくためのバッファにホールドスペースがある。

ストファイルはこんなファイル

1111
2222
3333
4444
5555
6666
7777
8888
9999
0000

-n は明示的にprintをしない限り、出力しない。

パターンスペースの内容を吐き出し次の行へ。ふと思ったけど、nextのnなのかな?
nありの場合
[root@testsv sedtest]$ sed -n '/3333/p' ./sedtest.txt
3333
nなしの場合
3333を読み込んだ時に一致するので、出力している。
[root@testsv sedtest]# sed '/3333/p' ./sedtest.txt
1111
2222
3333
3333
4444
5555
6666
7777
8888
9999
0000

{}はコマンドブロック。まとめて実行してくれる。

{}なしの場合
[root@testsv sedtest]$ sed -n '/3333/n;p' ./sedtest.txt
1111
2222
4444
5555
6666
7777
8888
9999
0000
{}ありの場合
3333の次の行がパターンスペースに追加されて出力された。
[root@testsv sedtest]$ sed -n '/3333/{n;p}' ./sedtest.txt
4444

ホールドスペース

3333から5555までをホールドスペースに保持し、末尾に追加する。
改行が入っているのはsedの仕様かな?
[root@testsv sedtest]# sed '/3333/,/5555/H;$G' ./sedtest.txt
1111
2222
3333
4444
5555
6666
7777
8888
9999
0000

3333
4444
5555

まだよくわかってないので、もうちょっと勉強しないと。。