テキストファイルの文字列を置換する
新規にターミナル(端末)。CTRL+ALT+T最も単純な置換処理
perl -lpe 's/対象文字/置換後文字/g' テキストfile
解説::
最期の/gでグローバルに全部置換。gがなければ最初に見つかったひとつのみ置換。
オプション::
l 自動chomp。改行を除去するなど行処理をいいかんじにしてくれる。
p ループ構造で実行してくれる。この場合Whileループがたった1文字で実現。
e 以下を計算式、命令として実行。この例は置換ですがそれ以外も使えます。
E にすると、sayなどが使えますので、Eで覚えたほうがいまどきいいかも。
Perlがワンライナーでいいかんじに処理してくれる好例です。gは常に付ける癖にしておいて、不要な時のみ外すようにしたほうが捗ると思います。解説::
最期の/gでグローバルに全部置換。gがなければ最初に見つかったひとつのみ置換。
オプション::
l 自動chomp。改行を除去するなど行処理をいいかんじにしてくれる。
p ループ構造で実行してくれる。この場合Whileループがたった1文字で実現。
e 以下を計算式、命令として実行。この例は置換ですがそれ以外も使えます。
E にすると、sayなどが使えますので、Eで覚えたほうがいまどきいいかも。
複数置換は、置換命令を連続して重ねていけばだいじょうぶ
perl -lpe 's/対象文字/置換後文字/g;s/対象文字/置換後文字/g;s/対象文字/置換後文字/g' テキストfile
Perlの置換の書式は、sedと同じです。sed/viに倣って設計されているからです。大量の置換処理が必要な場合は、sed同様ワンライナーよりもスクリプトファイルをテキストエディターで作成して実行するほうが得策です。
Perlの使い始めのうちは、こうしたものはパターンとしておぼえてしまうと楽かと思います。
最大のメリットはPerlを使うことでPerlの正規表現だけ覚えればOKということです。sedであれば微妙に動作が違うわけだし、OS問わず同じですから。めんどうを回避できます。
sedを超えるPerlのsed風味な機能は別稿にします。
おまけ:: Perl6 で正規表現テスト
ls | perl6 -pe 's:g/^.*?\.(.*)$/$0/ ;'
ファイルがいくつかあるディレクトリで実行してみるとよいです。ファイル名は置換されません。画面の結果だけですのでご安心を。
カレントにあるファイルのファイル頭からドットまでを削除して表示。ドットがなければそのフィアルをそのまま表示。
Perl5との違いは、キャプチャかっこの番号が0からになっている点。この場合のgは不要ですが、前に来ます。:が必要です。など。複雑になっていくとPerl5のようにはいきません。デリミタの自由度はとても高いです。
ファイルがいくつかあるディレクトリで実行してみるとよいです。ファイル名は置換されません。画面の結果だけですのでご安心を。
カレントにあるファイルのファイル頭からドットまでを削除して表示。ドットがなければそのフィアルをそのまま表示。
Perl5との違いは、キャプチャかっこの番号が0からになっている点。この場合のgは不要ですが、前に来ます。:が必要です。など。複雑になっていくとPerl5のようにはいきません。デリミタの自由度はとても高いです。
0 件のコメント:
コメントを投稿