bar_1

contents_map

2007年11月18日日曜日

Some Regular Expressions on sed, and perl.

最近試してみる機会があったワン・ライナー。文中の2種類の語を入れ替えるには?いわゆるテキスト中での「置換」sedとperlで試してみた。
なお、下記実験では、アンダースコア(_)2つを入れ換え処理におけるメタなキャラクタとして使用している; つまり処理前の文には、この文字列が含まれないことが前提だ。

まずは基本としてsedから。
TEXT="おもしろきこともなきよをおもしろく"; echo ${TEXT} \
| sed -e 's@おもしろき@__おもしろく@g; s@\([^_][^_]\)おもしろく@\1__おもしろき@g; s@__@@g';
⇒おもしろくこともなきよをおもしろき
perlでは?
TEXT="おもしろきこともなきよをおもしろく"; echo ${TEXT} \
| perl -pe 's@おもしろき@__おもしろく@g; s@\([^_][^_]\)おもしろく@\1__おもしろき@g; s@__@@g';
⇒おもしろくこともなきよをおもしろく
う~んちょっとへんだ。
グループ演算子のクォーテーションを取ってみる:
TEXT="おもしろきこともなきよをおもしろく"; echo ${TEXT} \
 | perl -pe 's@おもしろき@__おもしろく@g; s@([^_][^_])おもしろく@\1__おもしろき@g; s@_
_@@g';
⇒おもしろくこともなきよをおもしろき
よし。所望の結果が得られた。
言語ごとの正規表現とふるまいについては、『詳説 正規表現』で丹念に論じられている。良い本だ。

0 件のコメント:

コメントを投稿

何かありましたら、どうぞ: