0

別のフォーラムでこの質問をしましたが、回答がありませんでした。この質問をstackoverflowに投稿するように勧められました。

001.html 002.html 003.html などの名前の HTML ドキュメントが何百もあります。これらの HTML ファイルにはすべて、複数の定数 "F0" 文字列が含まれています。また、これらの HTML ファイルには、単一の可変文字列 {PABC} が含まれています。ここで、「ABC」はタイトル番号を表します。例えば:

001.html has F0 string(s) and a string {P001}.
002.html has F0 string(s) and a string {P002}.
003.html has F0 string(s) and a string {P003}.

等々。これらの HTML ファイル内のすべての「F0」を対応する「{PABC}」文字列に置き換えるにはどうすればよいですか? たとえば、複数の F0 と "{P001}" を含む 001.html があるとします。「F0」をすべて「{P001}」に置き換えたい。002.html についても同様で、F0 を "{P002}" に置き換えます。すべての HTML ファイルに対してバッチ操作を実行するにはどうすればよいですか?

それを行うことができる優れたテキストエディタ[ファイル内の変数を置換するための正規表現を備えた]はありますか?もしそうなら、どのように? これまでのところ、UltraEdit、Funduc Studio Pro などを試しましたが、実りある結果は得られませんでした。

ありがとうございました。

4

1 に答える 1

0

これは Vim を使えばかなり簡単です。

$ vim *.html
:argdo %s/\<F0\>/\='P'.fnamemodify(expand('%'), ':t:r')/ge | update
:q
  • expand('%')現在のファイルの名前を返します。
  • fnamemodify(x, ':t:r')拡張子を削除した( )の末尾 ( :t) を返しますx:r
  • \=次の式を評価し、それを置換として使用します
  • :%s/\<F0\>/.../geより大きな単語の内部にないすべてのF0文字列をバッファー全体の置換で置き換え、検索に一致するものがない場合でもエラーになりません。
  • |Vim が 1 つのコマンド ラインで複数のコマンドを指定する方法
  • update変更された場合にのみ、ファイルを保存します
  • :argdo引数リストのすべての項目に対して次のコマンドを実行します
  • :qVim を終了します

少し変更して、1 つのファイルで動作し、ファイルごとに 1 回実行することもできます。

vim -e -s -c '%s/\<F0\>/\="P".fnamemodify(expand("%"), ":t:r")/ge' -c x 001.html

ここでの主な違いは、Vim がスクリプト モード ( -e -s) で実行され、 コマンドupdateqコマンドが コマンドに置き換えられることxです。

于 2012-05-09T17:06:33.117 に答える