我有两个文本文件。第一个看起来像这样:
qwer
asdf
----
1234
5678
====
zxcv
第二个看起来像
uiop
hjkl
如何使用Powershell将第一个文件中“----”和“====”之间的部分替换为第二个文件的内容?期望的结果如下:
qwer
asdf
----
uiop
hjkl
====
zxcv
答案 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) + '====' )"