OK, isso é difícil de explicar, então darei um exemplo reproduzível:
Eu tenho um arquivo de texto que test.txt
conté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 sed
e 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.
sed 's/\//\\\\\//g'
e ele funcionou, muito obrigado.