Sed
Unix 的擴展正則表達式是否兼容?
Unix 的工具正則表達式完全兼容嗎?
例如,如果我
grep -oE "\$text *\( *([^)]) *\)"
,如果我使用,我是否保證替換我得到的確切部分sed -E "s/\$text *\( *([^)]) *\)/replacement/g"
?這擴展到所有正則表達式?這些匹配(或不匹配)到什麼程度?
在旁注中,我的 man sed 沒有顯示
-E
開關 - 但仍然有效,並告訴我正則表達式開關是-r
. 是-E
和-r
同一件事嗎?
GNU grep 和 GNU sed 的手冊都提到
-E
了使用擴展正則表達式的選項:抓地力:
-E
--extended-regexp
將模式解釋為擴展正則表達式 (ERE)。(-E 由 POSIX 指定。)
但是:
-E
-r
--regexp-extended
使用擴展正則表達式而不是基本正則表達式。
(還有一個提到
-E
被支持但之前沒有記錄。)您可以檢查兩者支持的正則表達式的確切定義,但您的正則表達式看起來足夠標準。事實上,它看起來等同於基本的正則表達式
\$text *( *[^)] *)
(除非您的sed
替換使用擷取組)。但是,請注意,如所寫(用雙引號括起來),它不會匹配任何內容。反斜杠將轉義 shell 的美元符號,防止它被視為參數擴展。但是
grep
or會看到一個以for end of linesed
開頭的正則表達式。$
行尾後不能有任何內容,因此模式無法匹配。您需要再添加兩個反斜杠,或者使用單引號而不是雙引號。