Sed não está interpretando corretamente os tubos

0

OK, isso é difícil de explicar, então vou dar um exemplo reproduzível:

Eu tenho um arquivo de texto test.txt contém a linha:

somesetting-parameter /an/old/path

Eu quero substituí-lo por um caminho que eu possa obter via ls , por exemplo:

ls /etc/init.d/ssh*

que gera /etc/init.d/ssh (Debian) ou /etc/init.d/sshd (outros)

Agora, para substituí-lo, eu queria usar sed e usar o recurso de citações de retorno, por isso executei o comando:

sed -i "s/\/an\/old\/path/'ls /etc/init.d/ssh* | sed 's/\//\\//g''/" test.txt

mas está me dando o erro

sed: -e expression #1, char 9: unknown option to 's'

enquanto o comando (sub) ls /etc/init.d/ssh* | sed 's/\//\\//g' está fornecendo a saída apropriada

\/etc\/init.d\/ssh

a tubulação é para o comando externo analisar as barras apropriadamente.

NOTA:

Eu sei que é facilmente realizável por um script de shell simplesmente usando uma variável, mas pedi para saber o que está errado, não para encontrar uma abordagem alternativa.

    
por Esam Bustaty 24.04.2014 / 01:34

1 resposta

0

O problema é que os dados de aspas duplas ainda serão processados pelo shell, removendo a barra invertida antes que ela atinja o sed ...

Em vez disso, tente aspas simples ou duplique as barras invertidas entre aspas duplas.

    
por 24.04.2014 / 01:56