Perl で区切り文字の変更

Perl でも困ったので。。書いておこう。

$/ → を変更すると区切り文字を変更できる。

■4. レコードの単位の変更

特殊変数 $/ の値を変えることで,読み込むレコードの単位を変更することができる。$/ のデフォルトの値は “\n”。$/ の値を空の文字列 (“”) とすると,空行をレコードの区切り文字 (record separator, RS) としてデータを読み込むことができる。
#worth を含む「段落」を出力する
% perl -e ‘$/ = “”; while (<>) {print if (/\bworth\b/i)}’ dll.txt

$/ の値を未定義 (undef) にすると,ファイル全体が1レコードとなる。複数のファイルを指定すると,ファイル単位の処理をすることになる。
% perl -e ‘$/ = undef; while (<>) {print if (/\bRussia/i)}’ voa/* > result.txt

while ループに入る前にレコードの区切り文字を指定する点に注意する。

オプション -n, -p を使い自動でレコードを読み込ませるようにした場合でも,BEGIN を使えば $/ の単位を自由に変えられる。(注意)
#ディレクトリ voa にあるファイルから ‘Russia’ を含むものを出力
% perl -ne ‘BEGIN {$/ = undef;} print if (/\bRussia/i);’ voa/*
#’Russia’ を含むファイルの名前を出力
% perl -ne ‘BEGIN {$/ = undef;} print “$ARGV\n” if (/\bRussia/i);’ voa/*

この辺にも一覧が…。


※参考:Bash で区切り文字の変更