Como escapar de caracteres especiais em longas cadeias sed

1

Eu tenho essa string que quero incluir na linha 115 de um arquivo, usando sed. No entanto, sempre se queixa de algum comando desconhecido. Eu segui outras soluções em outras questões, mas não consegui resolvê-lo.

sed '115"<"img src="\.\/index_files\/Logo\.png" width="200" height="160" align="right" border="0">"' index.html > test.html

Obrigado!

    
por Santi 19.01.2017 / 16:58

2 respostas

3

Porque " não é um comando sed . Como diz a mensagem de erro, embora não muito claramente.

O endereço 115 deve ser seguido por um comando sed , provavelmente i

  • Em seguida, elimine alguns dos " s. Aqueles em torno do < e depois do >
  • Então não escape do / s, eles não precisam escapar.
  • Em seguida, não escape de nada, pois o comando i apenas recebe texto.

Isso nos deixou com: sed '115 i <img src="./index_files/Logo.png" width="200" height="160" align="right" border="0">'

    
por 19.01.2017 / 17:13
2

O usuário richard descreve muito bem o que há de errado com o comando sed e também fornece o script de edição correto para executar a ação que você está tentando.

Estou dando uma abordagem alternativa que funcionará em vários casos diferentes:

O sed command r inserirá o conteúdo de um arquivo na posição atual no fluxo de dados.

Sua linha de comando sed poderia ser escrita

$ sed '115r /dev/stdin' index.html <data.in

que teria o mesmo efeito que sed '115r data.in' index.html ... se os dados que você queria inserir após a linha 115 fossem armazenados no arquivo data.in .

/dev/stdin é um arquivo especial que contém o que é enviado pela entrada padrão.

Você também pode fazer (com shells suportando "here-strings"):

$ sed '115r /dev/stdin' index.html <<<"my string of stuff"

ou

$ sed '115r /dev/stdin' index.html <<<"$myvariableofwonder"

Isso também funciona como esperado com o piping de outros comandos, obviamente:

$ sed -n '1,10p' myfile | sed '115r /dev/stdin' index.html

Isso irá transplantar as linhas 1 a 10 de myfile para index.html na linha 115.

    
por 19.01.2017 / 17:28