web-dev-qa-db-fra.com

Obtenir la première ligne de la sortie d'une commande Shell

En essayant de lire le numéro de version de vim, je reçois beaucoup de lignes supplémentaires que je dois ignorer. J'ai essayé de lire le manuel de head et la commande suivante:

vim --version | head -n 1

Je veux savoir si c'est la bonne approche?

52
john doe

Oui, c’est un moyen d’obtenir la première ligne de sortie d’une commande.

Si la commande génère quelque chose d'erreur standard que vous souhaitez capturer de la même manière, vous devez rediriger l'erreur standard de la commande vers le flux de sortie standard:

utility 2>&1 | head -n 1

Il existe de nombreuses autres façons de capturer la première ligne, notamment sed 1q (quitter après la première ligne), sed -n 1p (imprimer uniquement la première ligne, mais tout lire), awk 'FNR == 1' (imprimer uniquement en premier) ligne, mais encore une fois, tout lire) etc.

71
Kusalananda

J'utiliserais:

awk 'FNR <= 1' file_*.txt

Comme @Kusalananda le souligne, il existe de nombreuses façons de capturer la première ligne en ligne de commande, mais utiliser head -n 1 peut ne pas être la meilleure option lors de l'utilisation de caractères génériques, car cela affichera des informations supplémentaires. Changer 'FNR == i' en 'FNR <= i' permet d’obtenir les i premières lignes.

Par exemple, si vous avez n fichiers nommés fichier_1.txt, ... fichier_n.txt:

awk 'FNR <= 1' file_*.txt

hello
...
bye

Mais avec head, les jokers impriment le nom du fichier:

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye
3
alemol