なっく日報

技術やら生活やらのメモ

Perlのワンライナーでよく使うテクニック

あまり時間がないので5分で!

ファイルの中身を置換する

↓はカレントディレクトリ配下のJSファイルのfooという文字列をbar

perl -i -pe 's/foo/bar/' **/*.js

findと組み合わせたりもできます。 カレントディレクトリ配下のJSファイルのパスを置換をするために /が入るときはs{}{}の書き方にすると便利です。

find . -name '*.js' | xargs perl -i -pe 's{/tmp}{/var/log}'

マッチした行から必要なテキストだけを表示

echo 'var hoge = "foo";' | perl -lnE '/var (.+?) =/ && say $1'
# => hoge

みたいに書けます。

  • -lは改行の問題で悩まなくて済むようになるので、つけておきましょう。
  • -Esayが使えるのでちょっと楽ちん。

ESLintでWarningで引っかかっているルール名を抜き出す。

eslint . -f unix | perl -lnE 'm#Warning/(.+)\]# && say $1' | sort | uniq

awk的な使い方

  • -aをつけます。
  • これまた-lは改行の問題で悩まなくて済むようになるので、つけておきましょう。
echo 'a b c' | perl -lanE 'say $F[0]'
# => a

awkと違い、インデックスは0からで$F[0], $F[1]みたいに参照できます。

特定の文字列を含むプロセスを殺す! pkillが入ってない場合とかに使ってみてはいかがでしょうか。

ps aux | grep hoge | perl -lanE 'say $F[1]' | xargs kill

本日は

こんなところで。