【问题标题】:How to replace '= ' with '=none'如何用 \'=none\' 替换 \'= \'
【发布时间】:2022-12-01 06:35:03
【问题描述】:

我有这个 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 =”或“Ins​​tallDate =”或“name =”我必须在每一行中添加“无”一词

我试试

(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 =”或“Ins​​tallDate =”或“name =”我必须在每一行中添加“无”一词

【问题讨论】:

  • 试试这个,我认为它应该适用于这种情况:(Get-Content path\to\file.txt -Raw) -replace '=(?!\S)', '=NONE'
  • 如果流式传输内容(没有-Raw),则需要查找输入字符串(行)的结尾($):(Get-Content .\NoEmpty.txt) -Replace '=\s*$', '=NONE'
  • -replace '=$','=NONE'如果=之后什么都没有,$表示行尾

标签: powershell replace ps


【解决方案1】:

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

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

模式匹配:

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

请参阅regex matches

输出

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

CSName=DC04

Description=Update

FixComments=NONE

HotFixID=KB3150513

InstallDate=NONE

InstalledBy=NT AUTHORITYSYSTEM

InstalledOn=11/29/2022

Name=NONE

ServicePackInEffect=NONE

Status=NONE

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

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

请参阅group 1 matches

【讨论】:

    猜你喜欢
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2017-08-06
    • 2016-06-29
    • 2013-06-10
    • 2021-10-28
    相关资源
    最近更新 更多