
Ubuntu日本語フォーラム

ログインしていません。
複数のhtmlファイルに記述されている複数行を一括で置換したいのですが,どのようにすればいいのでしょうか?
WindowsではGrepReplaceを使っていました。
Linuxでは似たようなソフトとしてregexxerがあって,一行だけなら置換できたのですが,複数行にわたるとうまくいきません。
例えば,
<p>aaaaa</p> <p>bbbbb</p> <p>ccccc</p>
を
<p>aaaaa</p> <p>ccccc</p> <p>bbbbb</p>
としたいのですが。
regexxerでは,Perlの文法を使った正規表現で文字列を検索するようなのですが,Perlは全く分からず困っています。
何とかregexxerを使って複数行置換をしたいのですが…。
オフライン
一番簡単な方法と思われるのは、 sed を使って置換することだと思います。
ただし、掲示された置換は、文字列 b と c を 交換することと思われるので、一手間かける。
1:置換するファイル $ cat test.txt <p>aaaaa</p> <p>bbbbb</p> <p>ccccc</p> 2:置換用のスクリプト sedscr をエディタで作る bbbbb から ccccc へ置換した文字列が、再度、bbbbb へ変換されないように、 一旦、余計な文字を付け、それを後で外す $ cat sedscr s/<p>bbbbb<\/p>/<*p>ccccc<\/p>/ s/<p>ccccc<\/p>/<p>bbbbb<\/p>/ s/<\*p>/<p>/ 3:置換 $ sed -f sedscr test.txt <p>aaaaa</p> <p>ccccc</p> <p>bbbbb</p>
オフライン
si による投稿:
bbbbb から ccccc へ置換した文字列が、再度、bbbbb へ変換されないように、
一旦、余計な文字を付け、それを後で外す
$ cat sedscr
s/<p>bbbbb<\/p>/<*p>ccccc<\/p>/
s/<p>ccccc<\/p>/<p>bbbbb<\/p>/
s/<\*p>/<p>/
一旦余計な文字をつける発想はありませんでした。
ありがとうございます。
追加で,もう一つの例についても教えていただけないでしょうか。
複数のhtmlファイルに以下の部分が記述されているとして,
<p>aaaaa < /br> bbbbb < /br> ccccc</p>
bbbbb
< /br>
を削除して,
<p>aaaaa < /br> ccccc</p>
としたいのですが。
改行タグ< /br>を結構多用してしまっているのですが,特定の< /br>だけを一括削除するのは難しいでしょうか?
オフライン
sedで以下のようなスクリプトな感じですかね。
/^bbbbb$/{
N
/^bbbbb\n< \/br>/d
}オフライン
siさんとyamaさんの意見を参考に以下のとおりの手順でやったところ,複数のファイルの複数行置換ができました。
testというフォルダを作り,そこに2つのファイル(001.html,002.html)をおいて試してみました。
2つのファイルには以下の記述があります。
<p>aaaaa < /br> bbbbb ←削除したい < /br> ←削除したい ccccc</p>
1.テキストエディタで,以下のスクリプトを書いて,testフォルダ内に sedscr という名前で保存。
/^bbbbb$/{
N
/^bbbbb\n< \/br>/d
}2.端末を開き,testフォルダに移動後,以下のコマンドを入力(-iで上書き保存)。
sed -f sedscr -i *.html
3.ファイルを確認したところ,2つとも
bbbbb
< /br>
が削除されていました。
<p>aaaaa < /br> ccccc</p>
siさんとyamaさん,ありがとうございます(^_^)。
これで複数ファイルの複数行一括置換ができそうです。
オフライン
初歩的なミス…。
htmlの改行のタグは <br /> でした。
実際のhtmlを書くときはちゃんと <br /> としているに,どうして間違えたかな…。
うっかりミスでした。
すみませんm(_ _)m。
オフライン
複数のhtmlファイルにおける複数行一括置換ができるKFileReplaceというソフトがありました。
慣れるのにちょっと手間取りましたが,スクリプトなどがよく分からない私でも簡単に複数行一括置換ができました。
これで作業が効率的になりました。
オフライン