मेरे पास फ़ाइल (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"-स्ट्रिंग के लिए आसानी से संभव नहीं है, यह एक अज्ञात स्ट्रिंग है और इसमें कई वर्ण शामिल हो सकते हैं जिन्हें बचाना पड़ता है। ksh, awk और sed का उपयोग किया जा सकता है (कोई पर्ल / पायथन और अन्य स्क्रू। भाषाएँ)।