Perl実用メモ その1
シェルスクリプトの文字列処理補強の目的でPerlを利用したいと考えていた最中に、下記の良書を発見した。
ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法
- 作者: Tim Maher,安藤慶一,磯部孝一郎
- 出版社/メーカー: オライリージャパン
- 発売日: 2008/06/21
- メディア: 大型本
- 購入: 4人 クリック: 166回
- この商品を含むブログ (25件) を見る
トリミング
#トリミング(前後のスペースを排除) echo ' ho ge ' | perl -wnl -e '/[ ]*(.*)[ ]*/ and print $1' #内部のスペースも排除 echo ' ho ge ' | perl -wnl -e 's/[ ]//g and print' #(参考:もちろんsedでも同等の処理が可能) echo ' ho ge ' | sed 's/[ ]//g'
ログ検索
#ログのブロック検索 cat server.log | perl -wnl -00 -e '/PWC3999/ and print' perl -wnl -00 -e '/PWC3999/ and print' server.log # ブロック間の間切り表示を追加 perl -wnl -00 -e '/PWC3999/ and print("$_\n****************")' server.log # ブロックのナンバリングを追加 perl -wnl -00 -e 'BEGIN{${COUNT}=1;} /PWC3999/ and print("${COUNT}個目\n$_\n****************") and ${COUNT}++;' server.log
CSV
#ダブルクオート囲いのCSV。ダブルクオートのエスケープは "" # マッチする行を表示 printf 'a,b,c\n"a","b","c"\n"a""a","b""b","c"\n' | perl -wnl -e '/("([^"]|"")*",)*("([^"]|"")*")$/ and print;' # 特定の列番号(下記例では2番目)の値のみを表示 printf 'a,b,c\n"a","b","c"\n"a""a","b""b","c"\n' | perl -wnl -e '/("([^"]|"")*",){1}"(([^"]|"")*)".*$/ and print("$3");' # 特定の列番号(下記例では2番目)の値のみを表示。その上で "" を " に置換 printf 'a,b,c\n"a","b","c"\n"a""a","b""b","c"\n' | perl -wnl -e '/("([^"]|"")*",){1}"(([^"]|"")*)".*$/ and print("$3");' | sed 's/""/"/g'