2017-01-03 72 views
-3

我有一個文件,需要將每行的前兩個字符替換掉。看起來很簡單,但是這些相同的前兩個字符「| 0」顯示在文件的其他地方。所以我最終得到了替換字符串「$ bp」到處都是。任何方式只替換每行只有「| 0」的第一個實例?下面是樣本數據:通過PowerShell替換文件每行的前兩個字符

0|Corrupt Record|0|0|0|0|0|0|0|0|0 
+3

請提高通過張貼例如輸入和代碼示例演示該問題你的問題。 –

+1

'Get-Content「filepath」| ForEach-Object {$ _ -replace「^ \ | 0」,「」} |設置內容「文件路徑」'。 '^'表示字符串開始,反斜槓轉義'''''regex'中的特殊字符。 – sodawillow

+1

@sodawillow'(Get-Content「filepath」)| ...'如果你想寫入同一個文件。 –

回答

-1

我敢肯定還有其他的方法可以做到這一點,但這裏是我的做法怎麼會。

要替換第一個出現的「0 |」並有剩餘的時間你可以像這樣取代它。

$CorruptString = "0|Corrupt Record|0|0|0|0|0|0|0|0|0" 
[regex]$ToReplace = "0\|" 
$ToReplace.replace($CorruptString, "", 1) 

這將輸出:

腐敗記錄| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0

只是一個簡單的正則表達式替換損壞的字符串並將其替換爲任何內容或您想要替換的內容。自然,1是它只有一次。

我相信這就是你要找的。如果不嘗試解釋更多。

編輯:因爲有一些與該職位混淆。要替換字符串中的前兩個字符,您只需執行子字符串即可刪除前兩個字符。

"0|Corrupt Record|0|0|0|0|0|0|0|0|0".Substring(2) 
+0

請重新閱讀問題。 OP想要在每行中替換第一個出現的'0 |'(顯然是用變量'$ bp'的值),而不是完全刪除它。 –

1

你的問題不清楚(|0 VS 0|)。

您可以使用此代碼片段來代替每一行的第2個字符如果他們0|

$oldContent = Get-Content "my/file" 

$newContent = $OldContent | ForEach-Object { $_ -replace "^0\|","newstring" } 
# simpler 
#$newContent = $OldContent -replace "^0\|","newstring" 

$newContent | Set-Content "my/file" 
+1

'ForEach-Object'在這裏不需要。 '-replace'運算符與字符串和字符串數組一起工作。 –

相關問題