パラグラフ単位のgrepをawkで
AIXのgrepコマンドには-pオプションがあって、パラグラフ単位での検索ができる。デフォルトのパラグラフの区切りは空行で、-pに続けて引数を与えると区切りを変更できる。
$ grep -p regexp file.txt $ grep -p'^#' regexp file.txt #区切り文字を「^#」にする例
▲grepの-pオプションの書式。どってことないけど便利。
何気に便利なのでお気に入りだったのだが、家のMac OS Xのgrepには-pオプションがなかった。そこでどうにかできないかと調べたところ、awkで代用できることが発覚。特殊変数のRS(レコードセパレータ)を空行にすれば良いぽい。
$ awk 'BEGIN{RS=""} /regexp/{printf("%s\n\n",$0)}' file.txt
▲awkのonelinerで。「\n\n」が微妙にお粗末な感じ。
これをシェル関数にしてとりあえず満足した。
ただし問題があって、これではRS(区切り文字)に正規表現が使えない。grep -pはできるのに。。。どうにかならんかな。
-
-
- -
-
(8/21追記)
今の所下記のよーな感じになってます。
prgrep(){ RE=$1 ;shift awk -v RS="" -v ORS="\n\n" -v key="${RE}" '$0 ~ key' $@ }