【问题标题】:Powershell's -replace() does not preserve line breaks, or I'm doing it wrongPowershell 的 -replace() 不保留换行符,或者我做错了
【发布时间】:2015-02-20 18:58:37
【问题描述】:

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

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 中的换行符:

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

【问题讨论】:

    标签: powershell text replace


    【解决方案1】:

    -replace 替换单个字符串。 cat .\aaa.txt 返回一个字符串数组,然后-replace 必须先将其转换为单个字符串,然后-replace 才能对其进行处理——这就是你的结果。在 PowerShell v3 中,-raw 参数被添加到 Get-Content 以规避这种行为,所以如果你有,就这么简单:

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

    【讨论】:

    • 是的!我希望它会那么容易。我忘了它实际上是一个字符串数组,我正在传递它,所以现在这种行为对我来说非常有意义。
    【解决方案2】:

    这似乎有效

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

    【讨论】:

    • 其实这样会有替换所有空格的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 2011-01-08
    • 2020-08-04
    • 1970-01-01
    相关资源
    最近更新 更多