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

Я использую grep для разбора файла паролей.

Когда я использую

grep -w "avahi" /etc/passwd

Я получаю два ответа
avahi а также avahi-autoipd
Я не нашел способ дать мне уникальный ответ.

Эта команда является частью большего скрипта, где имя (avahi) на самом деле переменная.

Это работает, когда имя rpc а также rpcuser, Так что я предполагаю, что это как-то связано с чертой (-) во имя.

Актуальный код:

#!/bin/ksh
getent shadow |cut -d: -f1-2|grep ':!!'| cut -d: -f1 > /tmp/pasck
while read line
do 
   NOLOGIN=`grep -w $line /etc/passwd | cut -d -f7|cut -d/ -f3`
if [[ $NOLOGIN != "nologin: && $NOLOGIN != "false" ]] ; then
echo "$line" "$NOLOGIN" >> /tmp/pasck.list
fi
done <?tmp/pasck

Скрипт пытается пройти через теневой файл и искать пользователей без паролей. Затем я сравниваю результаты с файлом passwd, чтобы определить, какая из этих учетных записей настроена на /bin/false или же /sbin/nologin, Остальные были бы фактическими пользователями без установленного пароля, но разрешенного в системе.

2 ответа

Все очень просто - вы можете включить двоеточие после имени пользователя в вашем grep заявление:

$ grep "^avahi:" /etc/passwd

Вы можете использовать awk и явно протестировать первое разделенное двоеточиями поле:

awk -F: '$1 = "avahi"' /etc/passwd

Другие вопросы по тегам