2012-05-09 44 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