なお、下記実験では、アンダースコア(_)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 件のコメント:
コメントを投稿
何かありましたら、どうぞ: