适用于 Windows 的带管道支持的命令行通配符匹配工具

适用于 Windows 的带管道支持的命令行通配符匹配工具

我还没有找到任何命令行工具,只有当它匹配给定的通配符时才会打印输出。需要支持通配符 * 和 ?。

例如

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

?下面是如何使用支持和的PowerShell 的示例*

https://github.com/Tataz2/likeSTR

PowerShell 脚本可以编译为 exe。

答案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+"

相关内容