Как удалить нужную строку из файла, если в файле есть похожая строка
В демонах NetworkManager хранятся строки, которые начинаются с ExecStartPre
ExecStartPre=/bin/bash -c "if [ -f /etc/resolvconf/run/resolv.conf ]; then ln -nsf /etc/resolvconf/run/resolv.conf /etc/resolv.conf; else rm -f /etc/resolv.conf; fi"
ExecStartPre=/bin/rm -f /etc/resolv.conf
Нужно удалить строку ExecStartPre=/bin/rm -f /etc/resolv.conf
Использую команду:
sed -i '/ExecStartPre/d' /lib/systemd/system/NetworkManager.service
После выполнения в файле удаляются две строки, а хотелось бы удалить только с rm -f и здесь начинаются проблемы ... sed не принимает строку в аргументе и находит ошибочный формат, я передаю так:
sed -i '/ExecStartPre=/bin/rm -f /etc/resolv.conf/d' /lib/systemd/system/NetworkManager.service
На что в выводе получаю sed: -e выражение #1, символ 23: неизвестная команда: - Видимо он принимает параметр команды -f за команду. Или ему не нравятся пробелы, не понятно.
Как этого избежать?
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
Экранируйте же:
$ sed -i '/ExecStartPre=\/bin\/rm -f \/etc\/resolv\.conf/d' /lib/systemd/system/NetworkManager.service