2017-01-11 145 views
0

例如替換詞,認爲某個文件 「的abc.txt」 有以下內容閱讀的文本文件,並在

{GRAPHIC_FILE_1 = 「E:/ GE工作/腳本超級/ name.inp」}

{GRAPHIC_FILE_1 = 「E:/ GE工作/超級腳本/ result.rst」}

{GRAPHIC_FILE_1 = 「E:/ GE工作/超級腳本/ abaqusresult.odb」}

所以我想要一個腳本會讀取「* .rst」這.txt文件元研究,並與給定的名稱替換例如「badapple.rst」

或者我會輸入「result.rst」進行搜索,並與「badapple替換它。第一個」保留剩餘的所有相同的和所有其他行復制到新的文件

,我不能改變文本的語法文件應該正好寫 {GRAPHIC_FILE_1 =‘E:/ GE工作/腳本超級/ badapple.rst’ }

+0

可能重複[如何使用tcl /expect替換文件中的字符串(http://stackoverflow.com/questions/23394788/how-to-replace-a-string-in-a-file-using -tcl-expect) –

+0

@RakeshNair不太好,因爲這也是[tag:expect]的糾結。 –

回答

1

要替換文件中的另一個字符串,尤其是要更改字符串長度的位置,如果將整個文件加載到內存中,請執行此更改,然後再將其寫回來。

​​3210

那中間那塊缺失的東西呢?那麼,這取決於你想要做出什麼改變。這裏的細節很重要很多。然而,如果我們想換出result.rstbadapple.rst那麼這是用很容易string map(它取代與其他精確匹配精確匹配):

set content [string map {"result.rst" "badapple.rst"} $content] 

交換每*.rst是有點麻煩,因爲我們需要定義什麼*真的很適合這裏。我猜測它不包括目錄分隔符或雙引號!鑑於此,regsub -all是一個更合適的工具。

regsub -all {[^\\/""]+\.rst} $content "badapple.rst" content 

省略-all將使它只是替換第一個匹配的實例。

正則表達式是:

  • [^\\/""] - 匹配是^)反斜線,正斜線或任何字符雙引號,有一些事情一倍出於各種原因,包括報價和可讀性
  • + - 一個或多個前面的部分(即,一個或多個非壞字符)
  • \. - 一個句號(需要一個反斜槓,因爲.是RE元字符)
  • rst - 三個字母文字字符

如果你正在寫自己的RE,總是把它放在{大括號}

+0

謝謝,真的很感激 –