regex - 在 Windows 命令行的 Grep 中使用正则表达式

标签 regex windows cmd grep

我想捕获包含恰好 3个字段的所有行,其中字段是任何字符串(可能为空),后跟 | (并且可能有一些最终的行末尾的文本)。

我设法构建了一个正则表达式,它似乎完全符合我的要求

^(?:[^\|]*\|){3}[^\|]*$

当我尝试 101regex 时看起来效果很好。

但是,我在通过 grep 在 Windows 命令行上运行此 regex 时遇到问题,我猜这与正确的转义有关。

我试过了

grep -E '^^(?:[^^^\^|]*^\^|){3}[^^^\^|]*$' test.txt
grep -E '^^(?:[^^^|]*^|){3}[^^^|]*$' test.txt

但没有任何帮助。有什么想法吗?


测试输入

0|1|2|3
0|1|2|
|1|2|3
|1|2|
|1|2
|1|
0|1|2
0|1|
|1|2|3|4
|1|2|3|
0|1|2|3|4
0|1|2|3|

最佳答案

grep 中,当您使用 POSIX ERE 正则表达式引擎时,需要避免括号表达式和非捕获组中的反斜杠:

grep -E "^([^|]*\|){3}[^|]*$" test.txt

这里,[^\|] 被转换为 [^|] (因为 POSIX 括号表达式不将转义字符视为正则表达式转义)和 ( ?: 替换为 (,即该组被设为捕获,因为不支持非捕获组。

查看其有效的证据:

enter image description here

关于regex - 在 Windows 命令行的 Grep 中使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61229157/

相关文章:

c# - 注册协议(protocol)处理程序 Windows 7 - 错误的工作目录

c++ - Windows cmd 上的行尾

javascript - 使用正则表达式\b时如何排除单词中间的非单词字符

javascript - 在 JavaScript 中从正则表达式生成字符串

php - 处理 mysql 搜索中的特殊字符,例如西古尔·罗斯

android - Bluestacks (HD-StartLauncher.exe) 通过命令提示符打开

windows - Windows 批处理文件末尾的简单插入符 (^) 占用所有内存

javascript - 以 mm/dd/yyyy 格式验证日期的正则表达式

c# - 从 C# 应用程序调用 Chrome

c++ - Windows 消息异常