如何替换文本文件中单个单词的出现

问题描述 投票:0回答:1

我有一个configuration.txt文件,我的脚本使用该文件来填充脚本中的变量。 Tex文件的内容如下:

Setting1= Yes
Setting2= Yes
Setting3= Yes

然后我就这样填充变量(只提取是或否):

$Setting1=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting1='})
$Setting1=($Setting1 -Split '=', 2)[1].trim()

$Setting2=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting2='})
$Setting2=($Setting2 -Split '=', 2)[1].trim()

$Setting3=(Get-Content -Path .\configuration.txt | Where-Object {$_ -match 'Setting3='})
$Setting3=($Setting3 -Split '=', 2)[1].trim()

然后,我有了一些逻辑,如果用户通过脚本中的提示更改了这些设置,则脚本将使用以下代码更新文本文件:

((Get-Content -Path .\configuration.txt -Raw | Where-Object {$_ -match 'Setting1'}) -replace $Setting1, $UserSetting1) | Set-Content -Path .\configuration.txt

其中$ UserSetting1是用户的输入(“是”或“否”。

现在,此操作正在更改配置文件中的每个“是”或“否”,而不是仅更改我尝试使用match函数提取的特定行上的“是”或“否”。] >

换句话说,如果用户希望将设置1更改为“否”,并将设置2和3保留为“是”;该脚本将所有设置更改为“是”,而不仅仅是“ setting1”。

我的印象是我必须使用-Raw才能执行-replace,但是如上所述,-match函数似乎无法与-Raw函数一起使用...如果我不这样做, '不使用-raw,那么仅使用我匹配的单行重写我的配置文件。

我有一个configuration.txt文件,我的脚本使用该文件来填充脚本中的变量。 Tex文件的内容如下:Setting1 =是Setting2 =是Setting3 =是然后,我将变量原样填充到...中。

您可以只使用-replace进行更新。
$UserSetting1 = 'No' (Get-Content -Path .\configuration.txt) -replace '(?<=Setting1=).*',$UserSetting1 | Set-Content
由于-replace使用正则表达式匹配机制,因此您可以构造匹配项以仅返回要替换的数据。替换字符串可以是变量。请参阅下面的正则表达式说明。它与Setting1=之后的行上的其余字符匹配,然后将这些字符替换为$UserSetting1中存储的值。

(?<=)是正则表达式肯定的后置断言。它断言在字符串中的给定位置后面有一个完全匹配。

[Setting1=字符串Setting1=的文字匹配。

    .*尽可能多的字符,直到字符串的结尾(就在换行符之前)。
powershell replace file-get-contents
1个回答
0
投票
由于-replace使用正则表达式匹配机制,因此您可以构造匹配项以仅返回要替换的数据。替换字符串可以是变量。请参阅下面的正则表达式说明。它与Setting1=之后的行上的其余字符匹配,然后将这些字符替换为$UserSetting1中存储的值。
© www.soinside.com 2019 - 2024. All rights reserved.