sed: -e выражение #1, символ 44: незавершенный адрес регулярное выражение

sed: -e выражение #1, символ 44: незавершенный адрес регулярное выражение

ПРОБЛЕМА:

Я пишу скрипт для настройки установок 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

Связанный контент