コンテンツにスキップ

Perl

最終更新日: 2021-11-08
  • 文字列を編集したりするのに大変便利なやつ
    • sed や awk の代わりに使える
    • 構文は Perl そのものが使える。なにせ Perl なので

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

  • -e
    • ワンライナーでコードを書くやつ
    • php -rnode -e と同じ
    • Evaluate, Eval, 評価
  • -n
    • 入力の各行に対し処理がかかる
    • $. で行番号、$_ で行の文字列を取得できる
    • while (<>) 相当の処理
  • -p
    • 入力の各行に対し処理を行い、更に print $_ 相当の処理を実行する
  • -l
    • 入力($_)から改行文字を削除し出力に改行を追加する
  • -a
    • 入力の各行に対して awk 相当の文字列分割処理を行う(autosplit mode with -n or -p)
    • 分割した文字は $F に配列として入るので次のようにして取得できる
      • perl -ale 'print "$F[0] - $F[1]'
    • $#F を指定すると分割した個数が取れる
  • -F/pattern/
    • -a で split するパターンを設定する
    • 例えば -F, とすると CSV を分割できる
  • -i[ext]
    • ファイルを編集する
    • 使用例:perl -i -pe 's/aaa/xxx/' foo.txt
    • -i.bak のように指定するとバックアップファイルが作成される
    • このオプションは次に続く文字が解釈されるため、単体で指定する必要がある(-ipe のようには使えない)

構文

  • print
    • 標準出力に出力
    • 単体では print $_ と同じ挙動をする
  • s/foo/bar/
    • foo を bar に置換
  • /(.+)/; print $1
    • キャプチャした内容を出力
  • $_ について
    • 基本的に書かなくても補完される
    • 例えば echo aaabbc | perl -ne 's/c/d/; print' の出力は aaabbd となる

特定行を取得

  • perl -ne 'print if $. == 1'
    • 1 のところが行数なので、ここを変えることで任意の行の文字列を取れる