Objetivo: substituir ![alttext](url.png)
por <img src="url.png" alt="alttext">
.
As partes !
e (...)
funcionam bem, é a [...]
parte que não consigo trabalhar.
Como um exemplo simples, quero corresponder a entrada a [test] b
. Este é o comando que uso:
echo 'a [test] b' | sed 's/\[[^\]]*\]/x/'
Não funciona. Quando substituo os colchetes por colchetes angulares, funciona bem:
echo 'a <test> b' | sed 's/<[^>]*>/x/'
Por que o sed não entende o mesmo regex, mas com colchetes com escape? Funciona bem em outras ferramentas, como Python.
Dentro da definição de classe de caractere
]
é tomada literalmente ao seguir diretamente o^
. Então não fuja disso. Também está faltando um quantificador como+
, para dizer "um ou mais caracteres" ou*
"zero ou mais caracteres". Além disso, hásed
muitos em sua linha de comando.(
\+
sendo uma extensão GNU (agora também suportada por algumas outras implementações), o equivalente padrão é\{1,\}
)ou mais legível:
(
-E
sendo uma extensão BSD, agora também suportada pelo GNUsed
e algumas outras implementações; use-r
em versões mais antigas do GNUsed
).