2015-07-10 54 views
4

我想使用PowerShell搜索和替換xml文件中的字符串。 我試過這個:Powershell錯誤:方法調用...不包含名爲'替換'的方法

(gc d:\test.xml).replace('1234','xxxx')|sc d:\test.xml 

這對我的test.xml文件工作正常。我的test.xml文件的內容是:

uehjduehduhfeuf xxxxxxxx hallo "1234"

但該文件僅用於測試。我想編輯的server.xml形成我的Tomcat服務器以這種方式,如果我使用完全相同的命令中提到obove我收到此錯誤信息:

​​

有誰知道出了什麼問題?

回答

7

您還可以使用[System.IO.File]::ReadAllText($filename)得到一個字符串出文件,與所有換行和其他符號。

[System.IO.File]::ReadAllText("d:\test.xml").replace('1234','xxxx')|sc d:\test.xml 
+0

此作品!謝謝! – Tobi123

+0

如果答案對您有幫助,請點擊您想標記爲「答案」的答案左側的「打勾」。請在您正確回答的所有問題中這樣做。這有助於你和整個堆棧溢出社區。 – Vesper

+0

是的,當然我是這麼做的;) – Tobi123

1

獲取內容會給你一個字符串數組嘗試使用原始開關,像這樣:

(gc d:\test.xml -raw).replace('1234','xxxx')|sc d:\test.xml 
+0

不幸的是,這導致了另一個錯誤: Get-Content:找不到與參數名稱'raw'相匹配的參數。 – Tobi123

+0

我認爲在Powershell v3中添加了原始標誌 –

+0

@DaveSexton即使在[Powershell 5.0]中,我也沒有在'Get-Content'中看到'-raw'(https://technet.microsoft.com/zh-cn/我們/庫/ 4d594e54-2c28-4052-b3f8-1c27ea724561%28V = wps.640%29.aspx)。 – Vesper

4

當存儲在變量中Get-Content cmdlet的輸出,將數據存儲爲與用於所述源文件中的每一行一個元件Object類型(即Object[])的陣列。下面是from the documentation

When Get-Content reads a text file and stashes the contents in a variable, the data is stored as an array, with each line in the file (determined by the presence of a carriage return-linefeed character) representing a single item in the array.

當你把括號表達式周圍,PowerShell的創建一個臨時變量,這在Get-Content的情況下最終被Object[]類型。

爲了從源文件中替換文本,你需要通過數組進行迭代,並分別操縱各行:

gc d:\test.xml | foreach { $_ -replace "1234", "xxxx" } | sc d:\test.xml 

或者你也可以直接調用.NET基礎類庫,爲@Vesper指出。

1

謝謝你的解釋@Enrico Campidoglio!

除了你的答案,一些字符(如在我的情況PIPE)將​​需要進行轉義:

(gc d:\test.xml -raw).replace('\|',',')|sc d:\test.xml 

我會加入這個作爲一個評論,但我還不能...

相關問題