【问题标题】:using replace to clean up select-string input使用替换清理选择字符串输入
【发布时间】:2014-03-25 16:09:40
【问题描述】:

我正在解析日志并获取输出,但我想清理输出。目前我在输出中获取日志文件的完整路径,该路径很长且不需要。下面的代码是我正在尝试使用的代码,但我收到一个错误,即我的替换不是有效的正则表达式。

select-string $_ -pattern "gam.exe : Error 409: Entity already exists" -context 1,0 | ForEach-Object{$_ -replace "D:\test1\user\mail\mail-Load\logs","" }

我不确定我需要做什么才能获得正确的替换输入,我需要转义字符吗?

【问题讨论】:

  • 你试过用单引号代替双引号吗?
  • 我刚刚做了,但似乎并没有改变错误。它不喜欢 "D:\test1\user\mail\mail-Load\logs","" 或 'D:\test1\user\mail\mail-Load\logs',""

标签: regex parsing powershell replace


【解决方案1】:

反斜杠是正则表达式转义字符。要将其用作正则表达式中文字匹配的一部分,必须使用另一个反斜杠对其进行转义。如果您不确定需要转义哪些字符,[regex] 有一个转义方法,您可以使用该方法为您转义所有保留字符:

[regex]::escape("D:\test1\user\mail\mail-Load\logs")
D:\\test1\\user\\mail\\mail-Load\\logs

所以

 'D:\\test1\\user\\mail\\mail-Load\\logs' 

是您将用来匹配文字字符串的正则表达式

'D:\test1\user\mail\mail-Load\logs'

【讨论】:

  • 那行得通,我只需要转义 \ 并且它现在可以正确过滤。谢谢
猜你喜欢
  • 2012-04-09
  • 2014-08-31
  • 2013-01-30
  • 2021-12-28
  • 2012-08-01
  • 2012-08-11
  • 1970-01-01
  • 2015-11-03
  • 2017-10-22
相关资源
最近更新 更多