Windows gc replace 显示 \n 而不是新行

Windows gc replace shows \n instead of new line

这是我在 PowerShell 5.1 中使用的:

(gc test.txt) | ForEach-Object {$_ -replace '^(.*)(\r?\n|$)', '^(.*)(\r?\n|$)', 'this is a repl \ntest tex  test'} | Set-Content test2.txt

这是test.txt:

ok
ok
ok

这是当前的 test2.txt:

this is a repl ok\ntest tex ok test

虽然应该是:

first ok
second ok third

我也试过了,但出现以下错误:

sed -re "s|^(.*)(\r?\n|$)|this is a repl \ntest tex  test" test.txt > test2.txt

错误:

/usr/bin/sed: -e expression #1, char 19: unknown option to `s'

我也试过了(这在 Linux 中有效,但在 Windows 中无效):

sed -e "s|^(.*)(\r?\n|$)|this is a repl \ntest tex  test" -i test.txt
/usr/bin/sed: -e expression #1, char 19: unknown option to `s'

如何查找和替换正则表达式?

我搜索了 google 和 Whosebug 并尝试了一些命令,但它们在我的问题中显示 \n 如上。

PowerShell 中的单引号内不支持字符串转义序列。 '\n 是文字 \ 后跟文字 n 字符的序列。

需要用双引号,然后用反引号+n换行,即"`n"。所以,使用

"this is a repl ``ntest tex ` test`"