Хорошо, это трудно объяснить, поэтому я приведу воспроизводимый пример:
У меня есть текстовый файл test.txt
содержит строку:
somesetting-parameter /an/old/path
Я хочу заменить его на путь, который я могу получить через ls
, например:
ls /etc/init.d/ssh*
который выводит либо /etc/init.d/ssh
(Debian), либо /etc/init.d/sshd
(другие)
Теперь, чтобы заменить его, я хотел использовать sed
и использовать функцию обратных кавычек, поэтому я выполнил команду:
sed -i "s/\/an\/old\/path/`ls /etc/init.d/ssh* | sed 's/\//\\\//g'`/" test.txt
но это дает мне ошибку
sed: -e expression #1, char 9: unknown option to `s'
в то время как (под) команда ls /etc/init.d/ssh* | sed 's/\//\\\//g'
дает соответствующий вывод
\/etc\/init.d\/ssh
piping для внешней команды для правильного разбора слешей.
НОТА:
Я знаю, что это легко сделать с помощью сценария оболочки, просто используя переменную, но я попросил это знать, что не так, а не найти альтернативный подход.