A ferramenta regex do Unix é totalmente compatível?
Por exemplo, se eu grep -oE "\$text *\( *([^)]) *\)"
, tenho a garantia de substituir a parte exata que recebi se usar sed -E "s/\$text *\( *([^)]) *\)/replacement/g"
? E isso se estendeu a todos os regex?
Até que ponto eles combinam (ou não)?
Em uma nota lateral, meu man sed não mostra o -E
switch - mas ainda funciona e me diz que o switch regex é -r
. São -E
e -r
a mesma coisa?
Os manuais do GNU grep e GNU sed mencionam
-E
como opção para usar expressões regulares estendidas:grep :
sed :
(Também há uma menção de
-E
ser suportado, mas não documentado anteriormente.)Você pode verificar as definições exatas para os regexes suportados por ambos, mas seu regex parece padrão o suficiente. Na verdade, parece equivalente ao regex básico
\$text *( *[^)] *)
(a menos que suased
substituição use o grupo de captura).No entanto, observe que, conforme escrito (entre aspas), não corresponderá a nada. A barra invertida escapará do cifrão para o shell, evitando que seja tratado como expansão de parâmetro. Mas
grep
oused
verá um regex começando com$
for end of line. Não pode haver nada após o final da linha, portanto, o padrão não pode corresponder. Você precisa adicionar mais duas barras invertidas ou usar aspas simples em vez de aspas duplas.