sub-shell dentro do sed

1

Posso anexar ao início de um arquivo com:

sed -i '1s/^/word\n/' file

Estou lendo que, se eu usar aspas duplas, posso expandir as variáveis, então tento:

sed -i "1s/^/$(printenv)\n/" file

Eu acabo voltando:

sed: -e expression #1, char 15: unterminated 's' command

O que está acontecendo aqui. Está relacionado ao conteúdo da variável ou a alguma outra coisa?

    
por Philip Kirkbride 14.10.2017 / 16:56

2 respostas

6

Acho que o seguinte funcionaria:

sed -i '1 e printenv' file

Do manual do GNU sed:

'e COMMAND'
     Executes COMMAND and sends its output to the output stream.  The
     command can run across multiple lines, all but the last ending with
     a back-slash.

Como alternativa, você pode usar cat , mas isso requer a criação de um arquivo temporário:

cat <(printenv) file > temporary_file; mv temporary_file file

Se o pacote moreutils estiver instalado em sua máquina, você poderá evitar a criação manual de um arquivo temporário usando sponge :

cat <(printenv) file | sponge file
    
por 14.10.2017 / 17:11
5

Para inserir o conteúdo antes da linha 1:

ed -s file <<< $'0r !printenv\nwq'

Para inserir o conteúdo após linha 1:

ed -s file <<< $'1r !printenv\nwq'
    
por 14.10.2017 / 17:12