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
は改行の問題で悩まなくて済むようになるので、つけておきましょう。-E
でsay
が使えるのでちょっと楽ちん。
例
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
本日は
こんなところで。