1
votes

Comment grep uniquement la première chaîne d'une ligne

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.


2 commentaires

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?


3 Réponses :


0
votes

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


0 commentaires

3
votes

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


0 commentaires

1
votes

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


0 commentaires