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
まだよくわかってないので、もうちょっと勉強しないと。。