Perl - ワンライナー
Mac で sed を使ってタブを空白4文字に置換しようと思って
cat file.txt | sed 's/\t/ /g'
としたら、文字 t が空白4文字になった。sed はもう使いません。Perl でやります。
cat file.txt | perl -pe 's/\t/ /g'
でおk。別に cat を使わず
perl -pe 's/\t/ /g' file.txt
でもいいんだけど、処理を少しずつやっている感じで cat を使った方がしっくりくる。
ついでに、文字コード utf8、 改行 LF にして、全角空白を半角空白2個に置換することも追加すると
nkf -w -Lu file.txt | perl -pe 's/\t/ /g; s/ / /g'
となる。完璧。
Perl の一行だけで処理を書いてしまういわゆるワンライナーについては
Perl one liner 集 perl 1行野郎
404 Blog Not Found:perl - ワンライナーの書き方入門
に詳しく載ってる。-e は続く文字列を Perl の命令として解釈するものでワンライナー必須のオプション。他のオプションのうち -n, -p だけ説明すると
# -n は while (<>) { # ここを実行 } # -p は while (<>) { # ここを実行、かつ次の一文が自動で付く print; }
の意味。よって先程のタブを4つの空白に置換する perl -pe 's/\t/ /' file.txt は
while (<>) { s/\t/ /; print; }
を引数 file.txt で実行したことに等しい。これだけでいろいろできる。例えば grep は
perl -ne 'print if /word/' file.txt
と一緒。