У мене є файл (sudoers), в якому рядки можуть бути ідентичними, за винятком першого слова в них (різні користувачі можуть виконувати той же набір команд). Я можу витягти такий рядок за допомогою команди:
# grep -v '^ *%' /etc/sudoers |egrep "$users_in_which_I_am_interested | sort|awk '{sub(/^[ \t]+/, "")};1'
tom ALL = NOPASSWD:/usr/bin/pwdadm,/usr/bin/chsec,/usr/bin/chuser
jim ALL = NOPASSWD:/usr/bin/pwdadm,/usr/bin/chsec,/usr/bin/chuser
mark ALL = NOPASSWD:/usr/bin/pwdadm,/usr/bin/chsec,/usr/bin/chuser
peter ALL = NOPASSWD:/usr/bin/pwdadm,/usr/bin/chsec,/usr/bin/chuser
(/ etc / sudoers перед тим, як готовий видалити провідні та кінцеві вкладки та пробіли і замінити всі численні проміжки між словами одним пробілом). Ці рядки ідентичні, за винятком користувача. Я хочу мати можливість витягувати рядки, які мають однакові команди команд, налаштовані з тими ж дозволами, але різними користувачами, і призначити ім'я користувача змінної і запустити його через цикл.
# grep -v '^ *%' /etc/sudoers |egrep "$users_in_which_I_am_interested | sort|awk '{sub(/^[ \t]+/, "")};1'| uniq -cf 1
4 tom ALL = NOPASSWD:/usr/bin/pwdadm,/usr/bin/chsec,/usr/bin/chuser
Проблема для мене приходить сюди - як знайти всі рядки у файлі, які містять
"ALL = NOPASSWD:/usr/bin/pwdadm,/usr/bin/chsec,/usr/bin/chuser"
і призначити користувачеві в цих рядках змінну? "grep" -ing для рядка неможливий, це невідомий рядок і може містити безліч символів, які потрібно видалити. ksh, awk і sed можуть бути використані (не perl / python та інші scr. мови).