Как использовать регулярное выражение в 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 

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

  • Переместить файл на основе его содержимого
  • Почему у меня есть другой статус выхода для ps | grep в скрипте?
  • Сравните файлы, которые находятся в каталоге 1, но не в каталоге 2?
  • Как ls без рекурсивного
  • Как удалить двойные кавычки из файла, но не внутри двойных кавычек
  • вставить содержимое между совпадающим шаблоном в сценарии оболочки
  • возвращаемое значение команды, не отображаемой в скрипте
  • Каков наиболее эффективный способ проверить, установлен ли узел в настоящее время?
  • 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 непосредственно применяет изменения к файлу.

    Interesting Posts

    Ошибочно удалены файлы устройств scsi-drive

    Получение информации о системном оборудовании

    Как указать параметры конфигурации среды выполнения subversion?

    Как подсчитать точное количество созданных и удаленных файлов журнала sqlite?

    Arch Linux: проблема с новичком только в процессе установки (например, ошибка)

    Предварительный просмотр команды, созданной find -exec

    Скопируйте файл из nautilus-script в буфер обмена

    Создание строк слов с разделителями пространства из вырезанного выражения

    удалить вложенные папки и файлы, не удаляя родительскую папку и дочернюю папку?

    Как некоторые команды изменяют критерии автозаполнения с вкладками?

    Стереофонический захват с v4l2

    Удаление жесткого диска вызывает панику ядра

    Печать нескольких строк после n-го появления в bash

    Есть ли способ читать файлы из каталога virtual / proc с помощью smbclient?

    Просветительская подсветка E19

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