如何将配置文件中等号后为空的内容替换为=none?
问题描述
我有一份noempty.txt文件,内容如下:
Caption=http://support.microsoft.com/?kbid=3150513 CSName=DC04 Description=Update FixComments= HotFixID=KB3150513 InstallDate= InstalledBy=NT AUTHORITY\SYSTEM InstalledOn=11/29/2022 Name= ServicePackInEffect= Status=
需要将其中类似FixComments=、InstallDate=、Name=这类等号后为空的行,修改为=none(即等号后添加none)。我尝试了以下PowerShell命令,但并未生效:
(Get-Content -Path c:\path\noempty.txt) | ForEach-Object {$_ -Replace '=\s', '=NONE'} | Set-Content -Path c:\path\noempty2.txt
解决建议
你的命令未生效的原因是正则表达式=\s仅匹配等号后跟空白字符(空格、制表符等),但目标行是等号后没有任何字符就直接到行尾,所以这个正则无法匹配到这些行。
可以使用以下两种修正后的命令:
1. 仅匹配等号后无任何内容的行
如果确定目标行是等号后直接换行(无空白字符),使用这个命令:
(Get-Content -Path c:\path\noempty.txt) | ForEach-Object { $_ -Replace '=$', '=none' } | Set-Content -Path c:\path\noempty2.txt
正则=$表示匹配行尾的等号,也就是等号后没有任何内容的情况。
2. 兼容等号后有空白字符的情况
如果需要兼顾等号后有空白字符(空格、制表符)再到行尾的情况,使用这个命令:
(Get-Content -Path c:\path\noempty.txt) | ForEach-Object { $_ -Replace '=\s*$', '=none' } | Set-Content -Path c:\path\noempty2.txt
正则=\s*$中,\s*表示匹配0个或多个空白字符,$表示行尾,这样不管等号后有没有空白,只要到行尾就会被替换。
内容的提问来源于stack exchange,提问作者AlexP
相关产品推荐
相关产品推荐

