Хорошо, это трудно объяснить, поэтому я приведу воспроизводимый пример:

У меня есть текстовый файл 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 для внешней команды для правильного разбора слешей.

НОТА:

Я знаю, что это легко сделать с помощью сценария оболочки, просто используя переменную, но я попросил это знать, что не так, а не найти альтернативный подход.

1 ответ1

0

Проблема в том, что данные в двойных кавычках будут по-прежнему обрабатываться оболочкой, удаляя обратную косую черту до того, как они достигнут SED ...

Вместо этого попробуйте использовать одинарные кавычки или удвоить обратную косую черту внутри двойных кавычек.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .