J'écris un script qui vérifie une liste de tous les utilisateurs connectés au serveur (en utilisant who) et écrit dans le fichier Information la liste des noms d'utilisateur de seulement ceux qui ont les lettres a, b, c ou d. Voici ce que j'ai jusqu'à présent:
username pts/148 2019-01-29 16:09 (IP address)
Cependant, la commande qui affiche ceci:
who | grep '[a-d]' >> Information
Ce que je ne comprends pas, c'est pourquoi ma recherche grep affiche également le pts / 148, la date, l'heure et l'adresse IP. Je veux juste qu'il envoie le nom d'utilisateur au fichier Information.
Toute aide est appréciée.
3 Réponses :
Vous devez obtenir le premier mot, sinon grep
affichera la ligne entière contenant le texte correspondant. Vous pouvez utiliser awk
:
who | awk '{ if (substr($1,1,1) ~ /^[a-d]/ ) print $1 }' >>Information
Une autre façon consiste à utiliser la commande couper
pour obtenir la première partie de la chaîne uniquement.
who | cut -f 1 -d ' ' | grep '[a-d]' >> Information
Utilisation de awk pour générer des enregistrements où la première clonne correspond à [ad
:
$ who | grep -o "^[^ ]*[a-d][^ ]*" >> Information
Utilisation de grep
pour rechercher des lignes avec [ad] avant le premier espace:
$ who | awk '$1~/[a-d]/' >> Information
grep
affiche les lignes correspondantes. Cette ligne correspond.Où lui avez-vous dit de ne sortir qu'une partie de la ligne, au lieu de la ligne complète?