Vamos considerar este arquivo de teste:
$ cat file
\LeftLabel{foo}
\LeftLabel{$foo}
LeftLabel{foo}
Agora, vamos fazer a substituição:
$ sed -E 's|\LeftLabel\{([^$}][^}]*)\}|\LeftLabel{\textsf{}}|g' file
\LeftLabel{\textsf{foo}}
\LeftLabel{$foo}
LeftLabel{foo}
Como funciona
O comando substituto em sed
se parece com s|old|new|g
, em que old
é uma expressão regular, new
é o que substituir em seu lugar e a% finalg
informa sed para substituir todas essas ocorrências em uma linha não apenas o primeiro.
Em nosso comando, a parte old
se parece com:
\LeftLabel\{([^$}][^}]*)\}
Corresponde a \LeftLabel{
seguido por qualquer caractere diferente de $
ou }
, que é [^$}]
, seguido por qualquer número de qualquer caractere não }
, ou seja, [^}]*
, seguido por% código%. Observe que alguns desses caracteres precisam ter uma barra invertida na frente deles, para que o sed os trate como caracteres normais, e não como caracteres regex-ativos. Observe também que os caracteres dentro das chaves são colocados entre parênteses. Os parênteses são caracteres regex-ativos que dizem ao sed para salvar o que está dentro deles como grupo 1. Podemos referenciar esses caracteres como }
na parte do comando.