サンプル:コマンド行スイッチ
Perlのコマンド行スイッチ、-n、-p、-iを使用すれば、フィルタやワンライナーを書くことができる。
-n 自動ループ, -p 印字しながら、自動ループ,-e プログラムとして実行
知っている人は、エディタを開かずに処理ができて、非常に便利なものです。しかし、Perlを知らない人が、読むことができるように書くには、向いておらず、あまりお勧めできません。
プログラム例1では、-nおよび-eスイッチを組み合わせてコマンドから直接ファイル中の文字列の置換を行っています。
プログラム例2では、-pおよび-eスイッチを使用して、すべての大文字を小文字に変換しています。
プログラム例3では、-iスイッチを使ってファイルをその場で更新します。-iスイッチはバックアップファイルも作成します。-i.origの代わりに、-iを指定すると、そのままファイルを書き換えてしまうので注意が必要です。プログラム例3では、hello.txtのHelloをに変換して、バックアップを、hello.txt.origにしています。
プログラム例1
[it-engineer@home1 perl]# more sgml.txt
<GREETING>おはようございます。</GREETING>
<GREETING>こんにちは。</GREETING>
<GREETING>こんばんは。</GREETING>
<APOLOGY>こめんなさい。</APOLOGY>
<APOLOGY>申し訳ございませんでした。</APOLOGY>
<APOLOGY>どうもすみませんでした。</APOLOGY>
[it-engineer@home1 perl]# perl -ne 'print if /APOLOGY/' sgml.txt
<APOLOGY>こめんなさい。</APOLOGY>
<APOLOGY>申し訳ございませんでした。</APOLOGY>
<APOLOGY>どうもすみませんでした。</APOLOGY>
[it-engineer@home1 perl]#
プログラム例2
[it-engineer@home1 perl]# more hello.txt
Hello World.
[it-engineer@home1 perl]# perl -Mlocale -pe 's/([^\W0-9_])/\l$1/g' hello.txt
hello world.[it-engineer@home1 perl]#
プログラム例3
[it-engineer@home1 perl]# more hello.txt
Hello World.
[it-engineer@home1 perl]# perl -pi.orig -e 's/Hello/Big/e' hello.txt
[it-engineer@home1 perl]# more hello.txt
hello.txt hello.txt.orig
[it-engineer@home1 perl]# more hello.txt
Big World.
[it-engineer@home1 perl]# more hello.txt.orig
Hello World.
[it-engineer@home1 perl]#

