Grep
如何在 grep 中使用正則表達式(僅限基本正則表達式)實現交替?
我知道這個問題沒有多大意義,因為我可以使用擴展正則表達式 (ERE)。但是讓我們說一分鐘,實施交替是目前唯一的選擇。我將如何僅使用 BRE 實現它?還是我必須找到解決方法?
假設我們有這個字元串:
AAAAAA======-----======AAAAAAAAA
我現在的目標是僅使用基本正則表達式分別匹配 AAAAA、======、—–、====== 和 AAAAAAAAA。使用 ERE,這將很快完成,但我想知道如何僅通過 BRE 實現它。到目前為止,如果不讓一些匹配的字元串相互重疊,我找不到合適的方法(比如不應該發生的正則表達式匹配“AAAAA==”)。
很簡單: BRE不可能有輪換
POSIX BRE 不支持任何其他功能。甚至不支持交替。
你的基本目標:
我現在的目標是匹配……分別……與基本正則表達式。
可以使用 BRE:
$ str='AAAAAA======-----======AAAAAAAAA' $ echo "$str" | grep -Eo '(.)\1*' AAAAAA ====== ----- ====== AAAAAAAAA
甚至在 BRE grep 中有幾種模式:
$ echo "$str" | grep -o -e 'AA*' -e '--*' -e '==*' AAAAAA ====== ----- ====== AAAAAAAAA
或者將您的解決方案限制為 GNU grep(
\|
即使在 BRE 語法中也允許作為替代;這不是有效的 POSIX 功能):$ echo "$str" | grep -o '\(AA*\)\|\(==*\)\|\(--*\)'
但你的次要目標:
是否也可以將它們另外放在單獨的擷取組中?
只需要一個正則表達式,因為在 BRE 中不可能有交替,所以這是不可能的。