web-dev-qa-db-fra.com

Bash: motif grep de la sortie de la commande

Je suis vraiment nouveau avec bash, mais c'est l'un des sujets à l'école. L'un des exercices était:

Donnez le numéro de ligne du fichier "/ etc/passwd" où se trouvent les informations sur votre propre connexion.

Supposons que USERNAME soit mon propre identifiant de connexion, j'ai pu le faire parfaitement de cette façon:

 cat /etc/passwd -n | grep USERNAME | cut -f1

Ce qui a simplement donné le numéro de ligne requis (il peut y avoir un moyen plus optimisé). Je me demandais cependant s'il y avait un moyen de rendre la commande plus générale afin qu'elle utilise la sortie de whoami pour représenter le modèle grep, sans script ni utilisation d'une variable. En d'autres termes, pour conserver une commande d'une ligne facile à lire, comme ceci:

 cat /etc/passwd -n | grep (whoami) | cut -f1

Désolé si c'est une question vraiment noob.

15
MarioDS
cat /etc/passwd -n | grep `whoami` | cut -f1 

Le fait d'entourer une commande de `marques lui fait exécuter la commande et envoyer la sortie dans la commande dans laquelle elle est enveloppée.

23
Lynn Crumbling

Vous pouvez le faire avec une seule invocation awk:

awk -v me=$(whoami) -F: '$1==me{print NR}' /etc/passwd

Plus en détail:

  • les -v crée une variable awk appelée me et la remplit avec votre nom d'utilisateur.
  • les -F définit le séparateur de champ sur : comme il sied au fichier de mots de passe.
  • les $1==me sélectionne uniquement les lignes dont le premier champ correspond à votre nom d'utilisateur.
  • print affiche le numéro d'enregistrement (ligne).
11
paxdiablo

Vérifiez la substitution de commande dans la page de manuel bash.

Vous pouvez sauvegarder les tiques `` Ou $(), et personnellement je préfère cette dernière.

Donc pour votre question:

grep -n -e $(whoami) /etc/passwd | cut -f1 -d :

remplacera la sortie de whoami comme argument pour l'indicateur -e de la commande grep et la sortie de la commande entière sera le numéro de ligne dans /etc/passwd de l'utilisateur en cours d'exécution.

9
Chilledrat