週末には少しPerlを。

Perlスクリプトの学習日記です。

一行野郎(ワンライナー)でテキストファイルの行間に空行を入れたり削ったりする

元ネタ

ワンライナーでいろいろな事ができるようになるとカッコイイだろうなと 思いつつ手頃な教科書を探していたのですが、 "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 によりパラグラフモードでファイルが読み込まれます。