Perlのワンライナーでcat, grep, sed, awkを実現する



cat

  # 引数で渡したファイルを一行ずつ読み込み、-eで指定したコードの$_に渡す(-n)

  perl -wnl -e 'print;' test.txt

  # -nオプションに加えてprintまで同時に行う(-p) ※書籍「ミニマルPerl」では推奨されていない
  perl -wpl -e '' test.txt

※-lオプションはprint時に自動的に改行を付与するものっぽい
  
   # 文字列検索('table'を検索)
   perl -wnl -e '/table/ and print;' test.html
   # '/'を含む文字列検索
   perl -wnl -e 'm|http://| and print;' test.html
   # grep -v(HTML内で’<’を含まない行を検索)
   perl -wnl -e '/
   
sed置換
   # 単純な置換
   perl -wnl -e 's/table/test/g and print;' test.html
   # -iオプションでbackupを取ってからファイルを置換
   perl -i.bak -wpl -e 's/table/test/g' test.html
   # -iオプション(ファイル名に日付を付加)でbackupを取ってからファイルを置換
   perl -i.bak`date +%Y%m%d` -wpl -e 's/test/table/g' test.html
   
awk(-aオプションで行を空白区切りで配列(@F)へ格納する)
   # 二列目だけ表示
   perl -wnla -e '($first, $second)=@F;print $second;' test.txt
   # 区切り文字(デフォルト空白)を':'にして実行
   perl -wnlaF':' -e '($first, $second)=@F;print $second;' test.txt
   # 行末の列番号表示(awkのNF)
   perl -wnla -e '$num=@F; print $num;' test.txt
   # 行末の列の値表示(awkの$NF)
   perl -wnla -e '$num=@F; print $F[$num-1];' test.txt
   # backupファイルを作成した上で特定の列情報でファイルを上書きする
   perl -i.bak -wnla -e '($first, $second)=@F;print "$second $first";' test.txt


参考書籍: