in Develop

僕のためのperlワンライナー


プロセスの殺し屋すろっくさんだよ。

会社にはちゃんとしたキャリアをもつエンジニアが増えてきて、自分みたいな野武士系エンジニアはあまり見なくなりました。よく自分今の会社でこれだけ長くやっていられるなあとは思う毎日です。

そんな僕はたまにperlワンライナー使ってます。ワンライナー楽しいですよね。頭の体操にいいし、ふと簡単なことやるのも便利です。スクリプトとしてPerlを書く機会は減りましたがワンライナーはつかいます。

というわけでワンライナーです。昔初めてのPerlをかなり読んだんですけど、わからないことも多かったです。でも今振り返ると「あ、これこういうことなのね」っていうのが多いです。

自分のためのエントリーなのでPerlな本気なアレの人は以下は読まないでくださいね。簡単なことしかかかないです。

 

 

ではでは。

LinuxにはデフォルトでPerlが入ってます。僕はエンジニア初めて13年?14年くらいなんですけど、全部Perl入ってました。

perlは最初ご挨拶をつけます。スクリプト書く時は「use warnings」と「use strict」は必ずつけるのが常識ですね。ざっくりというと一つ目は警告を出す、二つ目はヤベー書き方は禁止っていうやつです。

ワンライナーではwarningだけ使ってるんですけど、ワンライナーでstrictって使うオプションあるのかな。そっちは知らないんでつけてないです。最初のperlコマンドの後に引数としてつかうんですけど、今のところ僕が主につかうのはこんくらいです。

  • w 警告
  • e 一行で書くぜ宣言
  • n 読み込みループ(出力なし)
  • p 読み込みループ(出力あり)
  • l  行末処理
  • M CPANモジュールをロード

他にもあるのかもしれないんで、使うようになったらメモがてらエントリー続けますね。

それでは実践編いきます。

ファイル名を指定してファイルの中の文字列1を文字列2に置換します。

perl -pi -e “s/文字列1/文字列2/g” [ファイル名]

Linuxコマンドのcatと同じ挙動です。ファイル名をただ標準出力に出します。

perl -wpl -e “” [ファイル名]

catして一部を置換します。最初のと挙動は同じかな。

perl -wnl -e “s/<元ワード>/置換ワード/g; print;” <filename>

こっちも同じ挙動ですね

perl -wpl -e “s/<元ワード>/置換ワード/g;” <filename>

nは出力なしなので、標準出力させたければwplと書く方がいいです。nでやったあと出力しようとすると最後にprintって書くので面倒です。

改行を全ての出力につけます。改行があればなにもしません。

perl -wnl -e “print $.;” <ファイル名>

$なんとかの扱いは以下ですね。

  • $   変数
  • $.  レコード番号]
  • $_ 読み込んだ内容全部

ファイルを行番号つきで標準出力します。

perl -wnl -e ‘printf “$.: “;print;’ <ファイル名>

grepがわり。

perl -wnl -e “/[検索したいワード]/ and print;” <filename>

 

長くなったのでここまで。あとでPart2かきます。