Perlのワンライナーでcat, grep, sed, awkを実現する
cat
# 引数で渡したファイルを一行ずつ読み込み、-eで指定したコードの$_に渡す(-n)
perl -wnl -e 'print;' test.txt
# -nオプションに加えてprintまで同時に行う(-p) ※書籍「ミニマルPerl」では推奨されていない
# 文字列検索('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参考書籍: