【问题标题】:Replacing digits in PowerShell doesn't work [duplicate]替换 PowerShell 中的数字不起作用 [重复]
【发布时间】:2017-10-26 15:03:24
【问题描述】:

编辑:虽然上面的问题是相关的,但这与问.replace-replace之间的区别不是同一个问题,也没有相同的答案。

根据Powershell docs

\d 匹配任何数字字符。

我有一个给出输出的命令(gggit grep 的别名):

packages/somemodule/index.js:69:                 log(`woo`)

我熟悉正则表达式,并想将输出更改为:

packages/somemodule/index.js:69                  log(`woo`)

即在第一个数字和冒号之后添加一个空格(如果您有兴趣,这是为了使文件可由编辑器打开)。但是一个数字,一次或多次,后跟一个冒号 \d+: 不起作用:

gg 'No previous' | % {$_.replace("\d+:",'xxxx')}

尝试不同的版本,the \d 不起作用。我做错了什么?

【问题讨论】:

  • 'packages/somemodule/index.js:69: log(`woo`)' -replace ':(\d+):', ':$1'
  • 是的,我最终使用了gg 'No previous' | % { $_ -replace '(\d+):','$1 ' }
  • 问题来自对replace和-replace区别的误解。是的,这不是你问的确切问题,但这里和那里的答案都源于同一个问题。骗子很好,这不会伤害任何东西。
  • @matt 我想这取决于您是否认为“重复”意味着“来自不同问题的这个答案也有帮助”(这是真的)或“这个问题是重复的”(这是错误的)。我倾向于认为“重复”是指后者

标签: regex powershell


【解决方案1】:

命令输出被视为字符串数据。在您的代码中,您正在调用不支持正则表达式的 [String].Replace() 方法。要使其按预期工作,您需要使用 PowerShell 的 -replace 运算符。

gg 'No previous' | % { $_ -replace '\d+:','xxxx' }

这种方法将允许 PowerShell 使用正则表达式进行字符串替换!

【讨论】:

    猜你喜欢
    • 2019-05-23
    • 1970-01-01
    • 2018-07-31
    • 2011-11-04
    • 2011-09-07
    • 2017-07-25
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多