我在 Windows 批处理文件中使用 Powershell 命令来搜索这样的文本字符串:(foo=1
可能1
是任何东西)
我知道.*?
在 Powershell 中用作通配符。下面的代码片段不是完整的命令,我只放了相关部分。
我试图foo=1
用 Powershell 通配符.*?
替换整行,1
如下所示:
-replace 'foo=.*?', ''
问题是,我没有留下空白行,而是留下了尾随=1
我不知道为什么没有按照上面代码框中的命令替换通配符。
提前感谢任何能对此有所启发的答案。
.?*
不是PowerShell中的“通配符” 。PowerShell中的
-Replace
运算符不使用通配符匹配,它使用正则表达式。在正则表达式中,
.
将匹配除换行符之外的任何单个字符。?
和*
,以及与或其他更具体的匹配字符结合使用+
的量词。.
以便:'.?'
不匹配或匹配一个字符'.*'
匹配零个或多个字符'.+'
匹配一个或多个字符PowerShell中的通配符由
-Like
and-notLIke
运算符使用,并用于轻松指定多个路径。除了大多数人熟悉的*
和之外?
,方括号 ([
&]
) 可用于定义字符范围或枚举。这就是名称中带有括号字符的路径需要使用-LiteralPath
参数的原因。因此,对于您的问题/示例,您需要一个简单的正则表达式。但是“
1
可能是任何东西”留下了几个选择:-replace 'foo=.'
-replace 'foo=.+$'
-replace 'foo=.+\ ' # space
-replace 'foo=.+,' # comma
我一直在摆弄并解决了:
在原始通配符之后添加额外
.*
内容使其工作。好的,现在我有几个小时的工作要做;)