繁体   English   中英

在 Grep 中为 Windows 命令行使用正则表达式

[英]Using regex in Grep for Windows command line

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

我设法构建了一个似乎完全符合我要求的regex

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

当我在101regex上尝试它时,它似乎工作得很好。

但是,我无法通过grep在 Windows 命令行上运行此regex ,我想这与正确的 escaping 有关。

我试过了

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 括号表达式不将转义字符视为正则表达式转义)并且(?:替换为( ,即该组被捕获,因为非捕获的不是支持的。

查看它正在工作的证据:

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM