我还没有找到任何命令行工具,只有当它匹配给定的通配符时才会打印输出。需要支持通配符 * 和 ?。
例如
echo 192.168.1.1 | WildcardMatch "19?.168.*"
echo aa-02-23201 | WildcardMatch "*-??-232*"
尝试使用批处理文件并调用 PowerShell 来实现这一点,但这太慢了。https://support.microsoft.com/en-us/office/using-the-like-operator-and-wildcard-characters-in-string-comparisons-c472b6df-0d3e-4ffc-a21c-bb5721cc460a
编辑:需要 -i 来使匹配区分大小写。
答案1
答案2
我还没有找到任何命令行工具只有在与给定的通配符匹配时才会打印输出。
需要支持通配符 * 和 ?。
?
据我所知,没有支持 rexexp 字符的命令行工具。
但是,您可以使用findstr
以下方式进行您正在寻找的匹配:
这将匹配:
F:\test>echo 192.168.1.1 | findstr /r "[1][9][1-9].168.*"
192.168.1.1
这将不匹配:
F:\test>echo 182.168.1.1 | findstr /r "[1][9][1-9].168.*"
F:\test>
进一步阅读
答案3
您还可以安装grep对于 Windows 并使用或多或少基本的正则表达式。
基于您的示例,使用 Perl 引擎,但您可以切换到更快的示例-G
:
IP 匹配不太准确:
echo 192.168.1.1 | grep -P "19\d\.168\..*?"
更精准的IP匹配:
echo 192.168.1.1 | grep -P "19\d\.168\.\d{1,3}\.\d{1,3}"
模式匹配:
echo aa-02-23201 | grep -P "[a-z]{2}-\d{2}-232\d+"