Как использовать регулярное выражение в sed?

Мне нужно отменить sudo доступ к пользователю, используя sed в скриптах.
Я хочу прокомментировать пользователя, только если строка содержит / bin / su – root
Давайте рассмотрим файл, как показано ниже, в котором я должен прокомментировать только первую строку.

mindadmin ALL = NOPASSWD: /bin/su - root mindadmin ALL = NOPASSWD: /bin/ifconfig 

Я использовал команды sed как sed ниже:

 sed -e 's/minadmin[\s]+ALL[\s]+=[\s]+NOPASSWD:[\s]+/bin/su - root/#mindadmin ALL = NOPASSWD: /bin/su - root/g' /etc/sudoers 

Но это не работает. Есть ли в нем синтаксическая ошибка?

4 Solutions collect form web for “Как использовать регулярное выражение в sed?”

Есть две проблемы: во-первых, ваши mindadmin имеют mindadmin и ваш шаблон minadmin (без d ).

Вторая проблема заключается в / s из /bin/su , вам нужно избегать их внутри регулярного выражения:

 sed -e 's/mindadmin[\s]+ALL[\s]+=[\s]+NOPASSWD:[\s]+\/bin\/su - root/#mindadmin ALL = NOPASSWD: \/bin\/su - root/g' /etc/sudoers 

в противном случае они заканчивают шаблон.

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

  sed '/\/bin\/su - root/ s/^/#/' filename 

Он находит строки в имени файла, содержащем /bin/su - root , и добавляет комментарий (#) в начале строки (^).

Добавьте параметр -i в sed для выполнения файла.

Если вы хотите прокомментировать все строки, содержащие /bin/su - root в конце строки, вы можете упростить выражение sed:

 sed 's/.*\/bin\/su - root$/#&/' 

Или, еще проще

 sed 's,.*/bin/su - root$,#&,' 

Чтобы прокомментировать все строки, содержащие /bin/su - root любой точке строки:

 sed 's,.*/bin/su - root,#&,' 

Поскольку & заменяется на весь шаблон соответствия, здесь другое решение:

 sed -i 's,.*/bin/su\s\+-\s+root,#&,' /etc/sudoers 

/ заменяется другим разделителем, поэтому вам не нужно его избегать. Шаблон также более гибкий, если интервал после команды su отличается.

Если он должен только изменить пользователя min d admin:

 sed -i 's,^mindadmin\s.*/bin/su\s+-\+root,#&,' /etc/sudoers 

Флаг -i непосредственно применяет изменения к файлу.

  • Сформированный вывод скрипта оболочки
  • Предотвращение расширения определенного пространства в переменной
  • Rsync ведет себя по-другому, если вызывается внутри скрипта
  • Сортировка нескольких файлов csv на основе двух столбцов в каталоге
  • Значение следующих команд Linux
  • Что означает `{{(выход 1); выход 1; }; } `означает?
  • Как предотвратить завершение сценария при выходе из оболочки?
  • Как автоматически подать два аргумента в программу после запуска?
  • Переместить файл, но только если он закрыт
  • bc удаляет десятичную точку
  • объединение имен файлов в переменную
  • Полные пары ключевых значений
  • Interesting Posts

    Недопустимая команда 'AuthAuthoritative'

    Инвертировать цвета в целом PDF (конвертирование)

    Перемещено / var / log на новый логический том сейчас отсутствуют данные

    Возможно ли «tail -f / dev / vcs»?

    «Доступ запрещен» для всех пользователей после сброса пароля root

    Какая программа читает и выполняет /usr/share/alsa/alsa.conf и связанные с ней сценарии?

    Объединение частичных дубликатов

    Извлеките все строки из файла, начиная с некоторой последовательности, а затем выведите его в другой файл

    Как получить вход из 2 файлов в исполняемом файле

    Скопировать FLAC теги в файлы MP3?

    Запуск приложения без оформления заголовка и окна

    Помощь в создании проектов Yocto (open embedded) с использованием кластерных вычислений в Linux

    почему права собственности на файловую систему не влияют после монтирования?

    выполнять команду по движению указателя, ждать и возвращаться?

    веб-камера не работает: отсутствует один или несколько необходимых элементов gstreamer

    Linux и Unix - лучшая ОС в мире.