Perl ワンライナー

作成日 : 2023-01-17
最終更新日 :

説明

Ruby のワンライナーと同様、Perl のワンライナーを調べた。まず、コマンドラインオプションを調べる。

Perl 正規表現

ワンライナーを習得するためには正規表現の置換について知らねばならない。 置換の正規表現は s/pattern1/pattern2/modifiers と書ける。ここで、modifiers は修飾子と呼ばれる。 次の文字が有効だ。

m

"^" 及び "$" が文字列中の各行のそれぞれ先頭と末尾に対するマッチングへと変更される。この修飾がなければ、 "^" 及び "$" は文字列のそれぞれ最初の行の先頭および最後の行の末尾に対するマッチングであることを意味する。

s

"." が改行を含む任意の 1 文字にマッチングするように変更される。 デフォルトでは . は改行にマッチングしない。 m と s は同時に使える。このとき、"^" 及び "$" はそれぞれ文字列中の改行の直前及び直後のマッチングとなるともに、 "." は改行を含む任意の文字にマッチングする。

i

大文字小文字を区別しないマッチングを行なう

他にも多くの修飾子がある。

ワンライナー一覧

やはり Perl はワンライナー(一行野郎)がいい。

主なオプション

実例

$ perl -pe 's/[0-3]/A/g' -i.bak rand.txt

rand.txt にある 0, 1, 2, 3 のいずれかの数字をすべて A に置換し、rand.txt を書き換える。もとの rand.txt は、 rand.txt.bak に残る。

$ perl -wnle 'm|https?://| and print;' test.html

test.html にある http:// または https:// から始まる文字列を表示する

$ perl -ne 'print if $.==1' filename

ファイルの最初の行を表示する

$ perl -0pe 's/^\xef\xbb\xbf//' filename

ファイル先頭に BOM があれば除去する

$ perl -0pe 's|<table.*?(<h1>.*</h1>).*<td.*?>(.*)<br ?/?>.*?</table>| <div id="container">\1<div id="itemB">\2</div> <div id="itemC">最終更新日 : <span id="revizio"></span></div></div>|s' filename

私のホームページにある HTML を HTML5 に準拠するよう書き換える。私のホームページにある HTML 4.01 のサンプルは下の通り。

<table><tr><td><h1>A</h1></td><td>B<br>C</td></tr></table>

参考

まりんきょ学問所Perl 手習い > Perl ワンライナー


MARUYAMA Satosi