お知らせ

  • 利用規約を守って投稿してください。また、よくある質問および投稿の手引きも参照してください。
  • メッセージの投稿にはアカウントが必要です。未登録の方は、ユーザ登録ページからアカウントを作成することができます。

#1 2009-07-29 20:55:29

kazumasa99
メンバ
登録日: 2008-09-25

複数ファイルの複数行一括置換をしたい

複数の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を使って複数行置換をしたいのですが…。

オフライン

 

#2 2009-07-30 03:55:55

si
メンバ
From: hokkaido kitami, jp
登録日: 2007-01-15

Re: 複数ファイルの複数行一括置換をしたい

一番簡単な方法と思われるのは、 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>

オフライン

 

#3 2009-07-30 11:05:12

kazumasa99
メンバ
登録日: 2008-09-25

Re: 複数ファイルの複数行一括置換をしたい

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>だけを一括削除するのは難しいでしょうか?

オフライン

 

#4 2009-07-30 14:05:59

yama
メンバ
登録日: 2006-10-23

Re: 複数ファイルの複数行一括置換をしたい

sedで以下のようなスクリプトな感じですかね。

コード:

/^bbbbb$/{
N
/^bbbbb\n< \/br>/d
}

オフライン

 

#5 2009-07-30 18:00:07

kazumasa99
メンバ
登録日: 2008-09-25

Re: 複数ファイルの複数行一括置換をしたい

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さん,ありがとうございます(^_^)。
これで複数ファイルの複数行一括置換ができそうです。

オフライン

 

#6 2009-07-30 19:04:14

kazumasa99
メンバ
登録日: 2008-09-25

Re: 複数ファイルの複数行一括置換をしたい

初歩的なミス…。
htmlの改行のタグは <br /> でした。

実際のhtmlを書くときはちゃんと <br /> としているに,どうして間違えたかな…。
うっかりミスでした。

すみませんm(_ _)m。

オフライン

 

#7 2009-11-02 01:33:37

kazumasa99
メンバ
登録日: 2008-09-25

Re: 複数ファイルの複数行一括置換をしたい

複数のhtmlファイルにおける複数行一括置換ができるKFileReplaceというソフトがありました。

慣れるのにちょっと手間取りましたが,スクリプトなどがよく分からない私でも簡単に複数行一括置換ができました。
これで作業が効率的になりました。

オフライン

 

Board footer

Powered by FluxBB