このブログを検索

2013/03/20

一括置換がうまくいかない

以下のような内容のテキストファイルがある。

aaa
<br>bbb
ccc


これを、以下のように書き換えたい。

aaa<br>bbb
ccc


つまり、

「行頭の<br>」、もしくは、「改行の後の<br>」を単なる<br>に置換したい


のである。

テキストファイルは多数あり、どのファイルに置換対象があるかはわからない。

まず、grepで対象ファイルを探そうと思った。

# grep -E '\n<br>' *.txt
#


これだと検索されない。

次のようにすると検索できる。

# grep -E '^<br>' *.txt
a.txt:<br>bbb
b.txt:<br>bbb


それでは置換してみよう。

# perl -pi -e 's/^<br>/<br>/g' *.txt
#


できない。

以下のような置換はうまくいくから、正規表現の問題だろうか。

# perl -pi -e 's/bbb/orange/g' *.txt
#


「sedでやれば?」と言うかもしれない。

実は以前これをsedでやろうとしてできず、1個ずつエディタを開いて直したことがあるのだ。

perlでやればいいのかと気づいて、やってみたら、やっぱりダメだったのだ。

sedのときは以下のいずれでもダメだった。

# sed -e "s/^<br>/<br>/g" *.txt

# sed -e "s/\n<br>/<br>/g" *.txt


viでは、以下のようにして置換できる。