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