Inserção de cadeia longa com sed

1

Estou tentando usar essa expressão para inserir o conteúdo de um arquivo de texto em outro depois de uma string de saída. Este é um script simples:

    TEXT='cat file1.txt'
    sed -i "/teststring/a \
    $TEXT" file2.txt

Isso retorna um erro, "sed: -e expressão # 1, char 37: comando desconhecido: 'M'"

O problema está no fato de que o conteúdo de file1.txt é, na verdade, um certificado privado, portanto, há uma grande quantidade de texto e caracteres incomuns que parecem estar causando um problema. Se eu substituir $ TEXT por um valor ASCII simples, ele funciona, mas quando lê o conteúdo grande de file1.txt ele falha com esse erro.

Existe alguma maneira de realizar essa ação? Minha sintaxe está desativada com sed ou minha colocação de cotação está errada?

    
por Luis Varca 29.10.2013 / 10:24

2 respostas

4

Use r para ler o arquivo de certificado, e não para acrescentar a string - o sed é confuso porque você precisa primeiro escapar de novas linhas e caracteres especiais na string para acrescentar. Você não precisa escapar de nenhum texto no arquivo - o sed apenas lê e o anexa.

sed -i "/teststring/r file1.txt" file2.txt
    
por 29.10.2013 / 10:58
1

Eu usaria o editor ed . É como vi , mas para linha de comando.

Exemplo:

$ echo foobar > /tmp/orig
$ cat > /tmp/add << EOF
> blablabla
> blablabla
> blablabla
> EOF
$ printf "/foobar\n.r /tmp/add\nwq\n" | ed /tmp/orig
7
foobar
30
37
$ cat /tmp/orig
foobar
blablabla
blablabla
blablabla
    
por 29.10.2013 / 10:32

Tags