在Powershell中给出以下字符串
$string = "this is a sample of 'my' text $PSP.what do you think"
如何使用-replace函数将字符串转换为
this is a sample of 'my' text Hello.what do you think
我显然需要以某种方式转义字符串,而且$ PSP在我的脚本中不是声明的变量
我需要更改$ PSP的所有提及其他字符串
答案 0 :(得分:8)
使用反引号字符(Tab键上方):
$string = "this is a sample of 'my' text `$PSP.what do you think"
要使用-replace运算符替换美元符号,请使用反斜杠转义它:
"this is a sample of 'my' text `$PSP.what do you think" -replace '\$PSP', 'hello'
或者使用string.replace方法:
$string = "this is a sample of 'my' text `$PSP.what do you think"
$string.Replace('$PSP','Hello)'
这是“我的”文本Hello的样本。您认为
答案 1 :(得分:0)
除非您修改原始字符串(例如,通过转义$),否则这是不可能的。
您的$string
确实不包含$PSP
,因为它在赋值语句中没有替换。
$string = "this is a sample of 'my' text $PSP.what do you think"
$string -eq "this is a sample of 'my' text .what do you think"
评估为:
True
答案 2 :(得分:0)
即使它确实很旧,它还是google中的第一个答案,所以我将添加一些细微的变化。
以我为例,我正在读取文件,并用$ s替换字符串。
我文件的简称为:
<version>$version$<version>
如果对一个(文件)流执行操作,变量不会自动替换,因此无需在文件中转义$。
在替换模式中,可以避免使用'而不是'解释变量。
我的最终命令如下:
(gc $fileName) | % { $_.replace('$version$', "$BuildNumber") } | sc $fileName
这是通过替换通过管道读取(获取内容)并返回到具有设置内容的文件的文件。
答案 3 :(得分:-1)
你应该试试
$ string = $ string.Replace(“\ $ PSP”,“Hello”)
或
$ string = $ string.Replace(“\ $ PSP”,$ the_new_value)
或更通用的使用Regex
$ string = [regex] :: Replace($ string,“\ $ \ w +”,“Hello”)