Sed não está interpretando corretamente os tubos

0

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

Eu tenho um arquivo de texto que test.txtcontém a linha:

somesetting-parameter /an/old/path

Quero substituí-lo por um caminho que possa obter 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 sede usar o recurso de aspas, então 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

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

NOTA:

Eu sei que é facilmente executá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.

Esam Bustaty
fonte

Respostas:

0

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

Em vez disso, tente aspas simples ou duplas nas barras invertidas dentro das aspas duplas.

Soren
fonte
Dobrei a barra invertida no comando sed interno sed 's/\//\\\\\//g'e ele funcionou, muito obrigado.
Esam Bustaty