sed -E 's/" rel="lightbox\[[0-9]+\]" title="/#/g' filename
Eu tenho um arquivo de texto e quero usar sed para substituir a seguinte string (incluindo o "s"):
" rel="lightbox[1846]" title="
com
#
Os números entre [
e ]
são variáveis e mudam.
Eu quero incluir o "
na substituição.
Estou lendo curingas e acho que .
ajudará de alguma forma - diferente de *
curingas aos quais estou acostumado.
Qualquer ajuda seria apreciada.
sed -E 's/" rel="lightbox\[[0-9]+\]" title="/#/g' filename
sed
é de fato a ferramenta certa para esse trabalho, com seu comando s
(o que é mais usado).
Caracteres curinga para nomes de arquivo no shell e expressões regulares em ferramentas como grep
e sed
têm uma sintaxe diferente. Veja Por que minha expressão regular trabalhar em X mas não em Y? para um resumo das diferenças.
No texto a ser substituído, [
é um caractere especial de expressão regular; os outros personagens representam por si mesmos. Como é um caractere especial, ele precisa ser escrito como \[
(a barra invertida faz com que o próximo caractere fique por si próprio em vez de ter seu significado especial).
Uma sequência de dígitos é [0-9]*
: [0-9]
significa “qualquer dígito” e *
significa “repetir o caractere ou conjunto de caracteres anterior 0 ou mais vezes”.
Assim:
sed 's/" rel="lightbox\[[0-9]]" title="/#/' <old-file >new-file
As aspas simples fazem com que o shell passe tudo literalmente para o comando sed
.
sed 's / "title=" / # / g' nome do arquivo
Mas se você quiser usá-lo em perl, você tem que usá-lo como abaixo
'sed' s / "title=" / # / g 'nome do arquivo
Tags sed regular-expression