的-replace
operator使用正則表達式,所以你可以合併你的三個腳本塊到一個這樣的:
Get-Content $tmpFile1 `
| ForEach-Object { $_ -replace 'replaceMe([1-3]).*', 'replacedString$1' } `
| Out-File $tmpFile2
這將爲文字文本搜索'replaceMe'
,然後是'1'
,'2'
或'3'
,並用'replacedString'
替換它,然後找到其中的任何一個數字('$1'
)。
另外,請注意,-replace
的作品類似於-match
,而不是-like
;也就是說,它使用正則表達式,而不是通配符。當您使用'replaceMe1.*'
時,它不代表「文本'replaceMe1.'
後跟零個或多個字符」,而是指「文本'replaceMe1'
後跟零個或多個出現次數('*'
)的任意字符('.'
)」。下面演示將被替換,即使它不匹配通配符的文字:
PS> 'replaceMe1_some_extra_text_with_no_period' -replace 'replaceMe1.*', 'replacedString1'
replacedString1
通配符模式'replaceMe1.*'
將在正則表達式可以寫爲'replaceMe1\..*'
,你會看到產生預期的結果(沒有替換執行):
PS> 'replaceMe1_some_extra_text_with_no_period' -replace 'replaceMe1\..*', 'replacedString1'
replaceMe1_some_extra_text_with_no_period
你可以閱讀更多關於在.NET Framework here正則表達式。