/ / Potrzebuję grep dla dokładnego słowa w pliku haseł, ale dostaję dwie odpowiedzi - linux, shell, grep, ksh, etcpasswd

Potrzebuję grep dla dokładnego słowa w pliku haseł, ale dostaję dwie odpowiedzi - linux, shell, grep, ksh, etcpasswd

Używam polecenia grep do analizy pliku haseł.

Kiedy używam

grep -w "avahi" /etc/passwd

Dostaję dwie odpowiedzi
avahi i avahi-autoipd
Nie znalazłem metody, która dałaby mi unikalną odpowiedź.

To polecenie jest częścią większego skryptu, w którym nazwa (avahi) jest w rzeczywistości zmienną.

To działa, gdy imię jest rpc i rpcuser. Zgaduję, że ma to coś wspólnego z kreską (-) w imieniu.

Rzeczywisty kod:

#!/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

Skrypt próbuje przejść przez plik shadow i szukać użytkowników bez haseł. Następnie porównuję wyniki z plikiem passwd, aby ustalić, które z tych kont są ustawione /bin/false lub /sbin/nologin. Pozostała część będzie rzeczywistymi użytkownikami bez ustawionego hasła, ale dozwolonego w systemie.

Odpowiedzi:

4 dla odpowiedzi № 1

Utrzymywanie rzeczy prostych - możesz dodać dwukropek, który pojawia się po nazwie użytkownika grep komunikat:

$ grep "^avahi:" /etc/passwd

0 dla odpowiedzi nr 2

Możesz użyć i jawnie przetestuj pierwsze pole oddzielone dwukropkiem:

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