Вставить строку NOPASSWD в нужное место в sudoers, где бы ее ни было

#sed

#sed

Вопрос:

Я новичок в скриптах. Мне нужно запланировать задание на нескольких серверах и вставить NOPASSWD в нужное место в файлах sudoers. Условиями являются пропуск строк, в которых присутствует PASSWD и wheel.

Я успешно использую приведенный ниже awk для извлечения строк, которые соответствуют моему выражению, но с помощью sed я не могу вставить или заменить требуемое.

 awk '($1 ~ "%" amp;amp; !/PASSWD/ amp;amp; !/wheel/) {print}' sudoers
  

Sed:

 sed '/NOPASSWD/b; s/ALL=(ALL)[[:space:]].* ALL/ALL=(ALL)[[:space:]].*NOPASSWD: ALL/g' sudoers
  

Не работает, а также не помогает, если команды отличаются от ВСЕХ.

Существующая:-

 %<<group 1>>       ALL=(ALL)      /bin/su - oracle12
%<<group 2>>    ALL=(ALL)       ALL
  

Ожидается:-

 %<<group 1>>       ALL=(ALL)      NOPASSWD: /bin/su - oracle12
%<<group 2>>    ALL=(ALL)       NOPASSWD: ALL
  

Любая помощь высоко ценится. Если есть какой-либо другой поток, который решил подобную проблему, пожалуйста, перенаправьте меня.

Ответ №1:

Ваша существующая команда awk с небольшими изменениями, похоже, работает :

 $ awk '($1 ~ "%" amp;amp; !/PASSWD/ amp;amp; !/wheel/) {$2 = $2 FS "NOPASSWD:"; print }' sudoers
  

Комментарии:

1. Спасибо тебе, Гаутам. как указано в вопросе, мы не можем использовать awk для редактирования inline так же, как sed . Я искал возможность такой же логики в sed, чтобы я мог выполнить ее на всех серверах. Я попытаюсь использовать это в каком-нибудь скрипте и достичь .. и обновить этот поток скриптлетом.. Еще раз спасибо за вашу огромную помощь.

Ответ №2:

Спасибо Gupta… Теперь проблема решена.

ниже приведен скрипт, который завершает задание. Дайте мне знать, если кому-нибудь понадобится объяснение.

awk ‘($1 ~ «%» amp;amp; !/ PASSWD/ amp;amp; !/wheel/) {$ 2 = $ 2 FS «NOPASSWD:»; print }’ /etc/sudoers > /tmp/temp_sudoers

при чтении строки сначала выполнить= echo $Line | cut -d' ' -f1 ; sed -i «s?^${First}.*?${Line}?g» /etc/sudoers done < /tmp/temp_sudoers

@gupta еще раз благодарю вас.