
ПРОБЛЕМА:
Я пишу скрипт для настройки установок Debian... Мне нужно закомментировать строку в sources.list для DVD, я пытаюсь использовать sed, я знаю, как удалить строку или строки, но вместо этого я хочу закомментировать ее.
У меня вот что:
sed -i '/deb cdrom:[Debian GNU/Linux 9.4.0 _S/s/^/#/' /etc/apt/sources.list
но выдает такую ошибку:
sed: -e expression #1, char 44: unterminated address regex
Я предполагаю, что проблема в кронштейне.
ВОПРОС:
В чем здесь проблема и как исправить команду и/или есть ли другой способ сделать это?
решение1
Попробуй это,
sed -i '/deb cdrom:\[Debian GNU\/Linux 9\.4\.0 _S/s/^/#/' /etc/apt/sources.list
- нам нужно экранировать символы
[
,/
и.
в шаблоне поиска,/
так как это разделитель, а[
также.
потому, что они являются операторами регулярных выражений.
решение2
Поскольку строка поиска является константой, а наличие метасимволов регулярных выражений является раздражителем, вы также можете сделать это следующим образом:
awk -i inplace 'index($0, "deb cdrom:[Debian GNU/Linux 9.4.0 _S"){$0 = "#" $0}1' /etc/apt/sources.list
Вам повезло, если у вас есть доступ к GNU awk 4.1.0
или выше для эффекта редактирования на месте. OTW, вы можете сделать это с помощью Perl
:
perl -pi -e 's/^/#/ if index($_, "deb cdrom:[Debian GNU/Linux 9.4.0 _S") + 1' /etc/apt/sources.list