一行野郎(ワンライナー)でテキストファイルの行間に空行を入れたり削ったりする
元ネタ
ワンライナーでいろいろな事ができるようになるとカッコイイだろうなと 思いつつ手頃な教科書を探していたのですが、 "Perl One-Liners Explained" という記事が英文ですが読みやすかったので、 ここに第一章の覚書メモを残すものです。
行間に空行を入れるには
各行に改行を付加して出力する方法
perl -pe '$_ .= "\n"'
とすればよろしい。3行の間隔を開けたいなら"\n"x3
とする。
-p スイッチは次のコードと等価になるとのこと。
while (<>) { # your program goes here } continue { print or die "-p failed: $!\n"; }
別解として、$OUTPUT_RECORD_SEPARATORを変更する方法や、
perl -pe 'BEGIN {$\="\n"}'
行末を置換する方法もあります。
perl -pe 's/$/\n/'
空行は処理しないようにするには
perl -pe '$_ .= "\n" unless /^$/'
とすればよい。正規表現「^$」が空行にマッチする。 さらに空白文字のみの行も空行とみなすなら perl -pe '$_ .= "\n" if /\S/' とすればOK
各行の前に空行をいれたいときは
perl -pe 's//\n/'
とする。 置換パターンが空なのであらゆる位置にマッチし、 この場合最初の文字の前の位置にマッチして 結果として行の前に改行が挿入される。
行間の空行を削除したいときは
すべての空行を削除したいとき
perl -ne 'print unless /^$/'
-n スイッチは以下と等価。
LINE: while (<>) { ... }
2つ以上の連続した空行を1つだけにしたいときは
perl -00 -pe ''
スイッチ -00 によりパラグラフモードでファイルが読み込まれます。