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}”字符串?比方说,我有 001.html,其中有多个 F0 和一个“{P001}”。我想用“{P001}”替换所有出现的“F0”。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 如何在单个命令行上指定多个命令
  • update仅在修改文件时保存文件
  • :argdo对参数列表中的所有项目运行以下命令
  • :q退出 Vim

你也可以稍微改变一下,让它在一个文件上运行,然后为每个文件运行一次。

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

这里的主要区别是 Vim 在脚本模式 ( -e -s) 下运行,并且updateandq命令被替换为x命令。

于 2012-05-09T17:06:33.117 回答