「すぐ分かるPerl」7.1 置換処理
■置換演算子「s///」
これは知ってるー。よく404 blog not found の弾さんが使っているので。
今回データとして扱うのはhtmlファイル。
なんかやっとそれらしくなってきた感じだ~!
でも、動的ページ作成とかにはまだまだっぽ行けど、ゆっくりしっかりやっていこう。
最初の一冊だし。
<html>
<! -- love.html -->
<title></title>
<h1>Love Home Page</h1>
Welcome to our page!<br>
Love is great<br>
©1999-2000 Love organization ©1999-2000 heart corp
</html>
この中の、「©」を「©」に置換する。
置換演算子の記述の仕方。
sはsubstituteの略。対象は「例のあれ」$_
s/置換前のパターン/置換後のパターン/
置換演算子として記述すると、こうなる
s/©/©/
基本のフィルター。
(思い出してかけたよ!)
while (<STDIN>){
print;
}
置換処理を挟んだフィルター(smpsub.pl)
#! /usr/local/bin/perl
# ampsub -- 実体参照を置換(実はバグっている)while (<STDIN>){
s/©/©/;
print;
}
このフィルタをつかってみる。
久々にwindowsで実行
C:\Documents and Settings\sironekotoro\デスクトップ>perl "C:\Documents and Settings\sironekotoro
\デスクトップ\ampsub.pl" < love.html > love2.html
実行結果
©1999-2000 Love organization ©1999-2000 heart corp
最初の箇所しか置換されていない。
これは置換演算子の特性によるもの。
最後にg(これはglobalの略)を加える事で、すべての文字列の置換を行う。
s/置換前のパターン/置換後のパターン/g
フィルタの場合には
#! /usr/local/bin/perl
# ampsub -- 実体参照を置換(実はバグっている)
while (<STDIN>){
s/©/©/g;
print;
}
となる。これで実行すると、すべての置換が行われる。
■複数の置換演算子を書く
置換演算子は連続して記述が可能。他のアスキーアコードも分かりやすく変換。
# ampsub
while(<STDIN>){
s/"/"/g; # 引用符(quote) '
s/&/&/g; # アンパサンド(ampersand) &
s/</≤/g; # 小なり(less than) <
s/>/>/g; # 大なり(grater than) >
s/™/™/g; # 商標(trade mark) (TM)
s/£/£/g; # ポンド記号(pound) £
s/¥/¥/g; # 円記号(yen) \
s/©/©/g; # 著作権(copyright) (C)
s/®/®/g; # 登録記号(registered) (R)
print;
}
■メモ
グローバル置換のgスイッチと大文字小文字を無視するiスイッチを併用することができる。
s/hi/hello/gi
とすると、全文のなかのhi,HI,Hi,hIが「hello」に変わる。
■メモ
フィルタを利用してデータを置換するときは、下記の順番を取る。
1.フィルター < 変換前 > 変換後
2.変換前と変換後を比較
3.「mv 変換前 変換後」で変換後で変換前を上書き
| 固定リンク
「Perl」カテゴリの記事
- 「すぐわかるPerl」 8.10 ディレクトリのリカーシブ処理(その2)(2009.02.24)
- 「すぐわかるPerl」 8.10 ディレクトリのリカーシブ処理(その1)(2009.02.23)
- 「すぐわかるPerl」 7.6 マッチした文字列と、その前後の文字列を扱う変数(2008.06.17)
- 「すぐわかるPerl」 8.9 コマンドの入出力に入出力を切り替える(2008.11.12)
- 「すぐわかるPerl」 8.8 標準入出力以外のファイルの制御(2008.10.08)









コメント