コマンドラインから実行(パイプ系)

back
■ 1. 通常のループ処理
-e の前に、-n を追加する(-ne || -n -e)
(-en は動かない ... -e の直後に command を書く必要があるため)


1) COMMAND を STDIN から受け取り、STDOUT へ出力
$ COMMAND | perl -ne 'print $_'


2) COMMAND の結果のうち、"foo"を"bar"に置換して出力
$ COMMAND | perl -ne 's/foo/bar/g; print'

3) squid のログの時間の部分を見やすくする
$ perl -ne 's/^(\d+?)\./localtime($1)/e; print' < /usr/local/squid/var/logs/access.log



■ 2. 通常のループ処理 + STDOUT への出力
-n ではなく、-p を追加する。
"print"しなくても、最終的な処理結果を自動的に STDOUT へ出力する。
(明示的に print すると、-p による出力と別に、二重に出力される)

上記 1, 2 はそれぞれ

1)
$ COMMAND | perl -pe ''

2)
$ COMMAND | perl -pe 's/foo/bar/g'

3) 
$ perl -pe 's/^(\d+?)\./localtime($1)/e' < /usr/local/squid/var/logs/access.log


と同じ。
※ (1)はただ print するだけ…


○ カレント以下の全ファイルのファイル数・サイズ合計を計算途中経過を含め出力 (1 statement)
$ find . -type f | perl -pe '($_="\r$. files ".($byte += -s (grep {chomp}($_))[0])." byte") =~ s/(\d{1,3})(?=(?:\d\d\d)+(?!\d))/$1,/g'

back