Powershell 的 -replace() 不保留换行符,或者我做错了

Powershell's -replace() does not preserve line breaks, or I'm doing it wrong

我有一个包含几行文本的文本文件,我想插入到另一个文本文件中。

aaa.txt:
aaaaaaaaaa
bbbbbbbbb
ccccccccc
dddddddd
eeeeeeee

bbb.txt:
slkdfjlskdfj dlfjsldkfj slkdfjs
{{replace}}
sdlkfjslkfj sldkfjsld kfjsldk fjsldk f
sldkfjslkfjlskjflskdjf
sdkfjslkjflsklsdjkf
sldfkjslkfjlskfj

但是,当我用 aaa.txt 的内容替换 {{replace}} 时,它会将所有文本放在一行上 - 我想保留 aaa.txt:[=12= 的换行符]

PS> $bbb = cat .\bbb.txt
PS> $bbb -replace('{{replace}}',(cat .\aaa.txt))
slkdfjlskdfj dlfjsldkfj slkdfjs
aaaaaaaaaa bbbbbbbbb ccccccccc dddddddd eeeeeeee
sdlkfjslkfj sldkfjsld kfjsldk fjsldk f
sldkfjslkfjlskjflskdjf
sdkfjslkjflsklsdjkf
sldfkjslkfjlskfj

这似乎有效

($bbb -replace('{{replace}}',$aaa)) -replace " ","`n`r"

-replace 替换单个字符串。 cat .\aaa.txt returns 一个字符串数组,然后 -replace 必须先将其转换为单个字符串,然后 -replace 才能对其执行某些操作——因此得到了结果。在 PowerShell v3 中,-raw 参数被添加到 Get-Content 来规避这种行为,所以如果你有那个,就这么简单:

$bbb -replace '{{replace}}', (cat -raw .\aaa.txt)