Linux, como uso o sed para editar apóstrofos?

0

Então eu preciso editar um monte de arquivos html .. Eu usei sed antes, em lote, mas o problema que estou tendo é que minha string de texto para localizar e substituir ambos contém apóstrofo. Embora você possa alterar o delimitador do sed simplesmente escolhendo o que quiser, aparentemente você não pode fazer o mesmo com o apóstrofo que inicia e termina o comando ... Existe outra maneira de fazer isso?

Eu estou olhando para encontrar '_blank'); "/ > e fazer outra coisa ... Usando @ como delimitador eu posso mudar praticamente qualquer porção, mas eu quero adicionar mais parâmetros a ela, e assim precisa ser capaz de 'enviar' apóstrofias. Existe uma maneira de fazer isso ou eu preciso procurar outro comando? Novamente, muitos arquivos, preferiria não fazer manualmente.

Obrigado,

151

edit: Eu não coloquei exatamente o que eu queria fazer por causa de todo o aspecto de "não pedir coisas para você" que esses sites suportam, mas me pediram nos comentários, então essencialmente ... ..

Olhando para mudar

ALIGN=CENTER '_blank');" /> 

para:

ALIGN=CENTER '_blank', 'width=100%'); />

o que eu tentei:

find . -name "*.php" -print | xargs sed -i "s@'_blank');" />@'_blank', 'width=100%'); />@g

Claro que no teste eu não estou usando o * .php, estou apenas testando em um arquivo específico.

    
por exit151 12.01.2016 / 07:21

1 resposta

0

Seu comando deve ser

find . -name '*.php' -exec sed -i 's/);"/, \'width=100%');/' {} \;

Não há necessidade de um pipe com xargs : a opção -exec fará exatamente isso para você; também -print não é necessário.

Os separadores '...' protegem o texto a ser alterado do shell; por este motivo você precisa escapar ( ie , para preceder ' com uma barra invertida, \' ) o apóstrofo dentro de sua substituição para dizer sed : veja, este não é o fim do s padrão, mas um caractere literal que deve ser considerado parte do padrão.

    
por 12.01.2016 / 08:13

Tags