powershell 如何将“=”替换为“=none”

7d7tgy0s  于 2022-12-18  发布在  Shell
关注(0)|答案(1)|浏览(131)

我有这个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”
我试过了

(Get-Content -Path c:\path\noempty.txt) | ForEach-Object {$_ -Replace '=\s', '=NONE'} | Set-Content -Path c:\path\noempty2.txt

但它不起作用
有什么建议吗?非常感谢亚历克斯

(Get-Content -Path c:\path\noempty.txt) | ForEach-Object {$_ -Replace '=\s', '=NONE'} | Set-Content -Path c:\path\noempty2.txt


例如,行“FixComments=”或“InstallDate=”或“name=”,我必须在每行中添加单词“none”

8hhllhi2

8hhllhi21#

您可以读取整个文件,匹配您感兴趣的部分,然后在替换中使用$0后跟NONE的完全匹配。

$pattern = "(?m)^[^\s=]+=[\p{Zs}\t]*$"
(Get-Content c:\path\noempty.txt -Raw) -replace $pattern, '$0NONE'

模式匹配:

  • (?m)启用多行的内联修饰符
  • ^字符串开始
  • [^\s=]+匹配1+次非空格字符,=除外
  • =逐字匹配
  • [\p{Zs}\t]*匹配可选的水平空白字符
  • $字符串结束

请参见regex matches
产出

Caption=http://support.microsoft.com/?kbid=3150513

CSName=DC04

Description=Update

FixComments=NONE

HotFixID=KB3150513

InstallDate=NONE

InstalledBy=NT AUTHORITY\SYSTEM

InstalledOn=11/29/2022

Name=NONE

ServicePackInEffect=NONE

Status=NONE

如果您不想在等号后面保留可能的尾随空格,可以使用捕获组,并在替换中使用组1,而不是整个匹配:

$pattern = "(?m)^([^\s=]+=)[\p{Zs}\t]*$"
(Get-Content c:\path\noempty.txt -Raw) -replace $pattern, '$1NONE'


请参见group 1 matches

相关问题