如何使用Powershell替换文件的一部分?

时间:2014-09-22 21:33:18

标签: powershell

我有两个文本文件。第一个看起来像这样:

qwer
asdf
----
1234
5678
====
zxcv

第二个看起来像

uiop
hjkl

如何使用Powershell将第一个文件中“----”和“====”之间的部分替换为第二个文件的内容?期望的结果如下:

qwer
asdf
----
uiop
hjkl
====
zxcv

2 个答案:

答案 0 :(得分:3)

正则表达式会这样做。

$File1 = Get-Content C:\Path\To\FileToChange.txt -Raw
$File2 = Get-Content C:\Path\To\NewContent.txt -Raw
$file1 -replace "(?s)(?<=----).*(?=====)","`n$file2`n"|Out-File C:\Path\To\NewFile.txt

完成。它将这两个文件作为多行字符串读取,在&#39; ----&#39;之后找到任何文本。之前&#39; ====&#39;并将其替换为第二个文件中的文本。它会在文本前面附加一个新行,所以一切看起来都是正确的,你不会以---- uiop作为一行或hjkl ====作为一行。

修改:如果您的PowerShell版本不支持-Raw,则应该可以使用-ReadCount 0。或者,如果失败了,请尝试:

(Get-Content <path>) -join "`n"

答案 1 :(得分:0)

您也可以使用:

$file1 -replace '----[\s\S]*?====', "$( '----' + $(gc $file2) + '====' )"