2012-05-09 48 views
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也是一样,用“{P002}”替换F0。我如何对所有HTML文件执行批处理操作?

是否有任何好的文本编辑器[用于替换文件中找到的变量的正则表达式]可以做到这一点,如果是这样,如何?到目前为止,我已经尝试过UltraEdit,Funduc Studio Pro和其他没有丰硕成果的人。

谢谢。

+0

换句话说,问题在于用同一个文件中找到的不同但可变的行替换文件中的一行;并批量操作数百个HTML文件。 – user1385159

回答

0

Vim相当简单。

$ vim *.html 
:argdo %s/\<F0\>/\='P'.fnamemodify(expand('%'), ':t:r')/ge | update 
:q 
  • expand('%')返回当前文件的名称。
  • fnamemodify(x, ':t:r')返回x尾部(:t)与扩展移除(: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)和updateq命令由命令x替换被运行。

+0

由于我从未使用过Vim,我如何在VIM for Windows上运行该命令。然后,我也无法确定如何导航到所有HTML文件所在的目录。有小费吗? – user1385159

+0

Vim通常将自己添加到资源管理器中的右键单击菜单。你应该能够选择所有的文件,右键点击'用单个Vim编辑',然后运行':argdo'和':q'命令。 – jamessan