簡體   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