weblog of key_amb

主にIT関連の技術メモ

Perlのワンライナーとコマンドラインオプション

コマンドラインオプション

オプション 意味
-e 文字列をスクリプトとして実行
-l 強制改行
-M{モジュール名} モジュールをuseする
-MO=Deparse コマンドライン実行時にスクリプトに変換する
-n 1行ずつ処理
-p 出力
-i 出力先を入力ファイル自身にする

以上を踏まえて、以下によく使う使い方を書く。

1行ずつ処理

# 行番号を表示
perl -nle 'print "$.:$_"' hoge.txt
# スペース区切りで4番目と最後の要素を抜き出す
perl -nle '@a = split(/\s+/, $_); print "$a[3]\t$a[-1]"' hoge.txt

置換

比較的よく使います。

# "foo"を"bar"に置換
perl -pi -e 's/foo/bar/g' foo.txt
# バックアップを同時に作成
perl -pi'*.back' -e 's/foo/bar/g' foo.txt
# find-xargsと組み合わせ
find -name "*.config" | xargs perl -pi'.back' -e 's/foo/bar/g'

フィールドの切り出し

# カンマ区切りの1,2番目を切り出し。-Fがなければスペース区切り
perl -F, -lane 'print $F[0],"|",$F[1]' test.csv