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.

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.


Dobrei a barra invertida no comando sed interno sed 's/\//\\\\\//g'e ele funcionou, muito obrigado.
Esam Bustaty
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.