我正在尝试找到一个特定的词
(find)
并将其替换为自身,但在它之后通过变量添加换行符和一些其他文本,例如:
find
new text
我的代码是这样的:
powershell -command "$file=(gc file.txt);$var=(gc value.txt);$null=new-item -force $file -value ((gc -encoding utf8 $file) -replace ('find',$var) | out-string)"
如何在替换中添加单词
find
和换行符?
在 PowerShell 代码中:
-replace 'find', "`$0`n$var"
$0
在基于 regex 的 -replace
运算符的替换操作数中指的是正则表达式指定为第一个匹配的操作数。
注意:
$0
等同于 $&
,尽管后者更常用,但使用 $0
是有意的 - 见下文。
由于使用了 可扩展(双引号)字符串 (
"..."
),$
占位符的 $0
必须转义为 `$
才能传递给 .NET 正则表达式引擎(这是处理此类占位符的引擎。
"`n"
是一个 escape sequence 扩展为仅 LF 的换行符;使用 "`r`n"
用于 Windows 格式的 CRLF 换行符,或 $([Environment]::NewLine)
用于平台原生换行符格式。
$var
将此变量的(字符串化)值嵌入到结果字符串中
(gc value.txt)
(Get-Content value.txt
) 可能返回多个字符串,即每行一个字符串,这些字符串收集在一个array中。在 "..."
内对这样的数组进行字符串化将其转换为 single-line 表示,元素用 spaces 分隔。使用 Get-Content
-Raw
作为一个整体读取多行文件(尽管您随后可能想要修剪 trailing 换行符)。在您的 PowerShell CLI 调用的上下文中,从外部 PowerShell:
将
-replace ('find',$var)
替换为:
-replace 'find', \"`$0`n$var\"
注:
"
字符。必须进行 \
转义,以便 PowerShell 的命令行处理将它们保留为代码的一部分,以便随后执行。
如果在从$&
/批处理文件
调用时使用
$0
代替cmd.exe
,以上内容将not工作,因为
&
字符会与cmd.exe
的解析发生冲突.
&
(或其他 cmd.exe
元字符,例如 ^
和 |
)的情况,有一些解决方法 - 请参阅 this answer。