Usando sed para substituir uma string contendo inteiros variáveis

1

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.

    
por speld_rwong 10.04.2016 / 02:47

3 respostas

3

sed -E 's/" rel="lightbox\[[0-9]+\]" title="/#/g' filename
    
por 11.04.2016 / 00:02
0

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 .

    
por 11.04.2016 / 02:36
-1

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

    
por 25.08.2016 / 13:08