Comment extraire uniquement la ligne nécessaire de la sortie du terminal?

16

Je veux obtenir seulement disons la troisième ligne de df -hsortie.

Quel type de commande dois-je utiliser?

emrecnl
la source
16
Note pour l'avenir: cette question est très très basique. Il est généralement encouragé de montrer certains efforts et ce que vous avez essayé avant de demander.
Sergiy Kolodyazhnyy
Bien qu'il puisse être légitime d'obtenir la 3e ligne d'un fichier avec un format statique présumé, cela est différent de la 3e ligne d'un programme de diagnostic avec une sortie qui varie en fonction de l'état du système. Par exemple, monter un nouveau lecteur / partition par ordre alphabétique avant que votre 3ème ligne actuelle ne le souffle. Ainsi, la réponse de @ Random832 ci-dessous est la meilleure.
MarkHu

Réponses:

31

Cela produira la 3e ligne, quel que soit le contenu.

df -h | sed -n 3p
muru
la source
+1 pour la réponse la plus petite: df -h|sed -n 3p.
EKons
16

La dfcommande accepte en fait un argument identifiant le système de fichiers souhaité. Vous pouvez donc utiliser, par exemple, df /homeou df /dev/sda3.

Si vous avez l'intention d'analyser la sortie d'un script, vous voudrez l'utiliser df -Ppour garantir qu'il ne passe jamais sur plusieurs lignes. Ainsi, par exemple, vous pouvez utiliser df -Ph /home | tail -n +2(mais si vous analysez la sortie d'un script, soyez conscient de la possibilité de noms de fichiers avec des espaces)

Aléatoire832
la source
2
C'est ça! Au lieu d'analyser la sortie, utilisez la commande pour fournir exactement ce que vous voulez.
fedorqui
1
Mais le PO a dit qu'il voulait que la ligne 3. df /homefournisse un en-tête. Vous interprétez le but de l'utilisateur. Vous pouvez avoir raison. Vous avez peut-être tort, qui sait?
Mike S
@MikeS Une douzaine d'autres réponses ont déjà couvert la ligne 3 sans contexte. J'ai fourni des informations supplémentaires pour que le PO les ait s'il leur est utile. Et tail -n +2supprime l'en-tête.
Random832
14

Vous pouvez utiliser une combinaison de headet tail:

df -h | head -3 | tail -1

Ou

df -h | tail -n +3 | head -1

Mais notez que, dfpermet de filtrer la sortie des options dedf lui-même, vous devez d'abord les regarder avant d'utiliser une commande externe.

Vérifiez man df.

heemayl
la source
4
+1 pour mentionner que df peut filtrer des entrées spécifiques
Sergiy Kolodyazhnyy
2
En effet, il est presque toujours préférable de filtrer les données elles-mêmes avant de les diriger vers des programmes externes.
Zach Mertes
10

Awk est un outil de traitement de texte, il convient donc à cette tâche

df -h | awk 'NR == 3'
Sergiy Kolodyazhnyy
la source
6

Je suppose que vous ne recherchez pas nécessairement la troisième ligne, mais la ligne qui mentionne un disque spécifique (par exemple /dev/sda3) ou un point de montage spécifique (par exemple /home).

Ainsi, au lieu d'afficher simplement la troisième ligne, ce qui n'est pas sûr car l'ordre de sortie peut changer et vous pouvez obtenir un résultat différent, vous pouvez filtrer la sortie par contenu et afficher uniquement les lignes qui correspondent à un modèle spécifique ou contiennent un mot-clé.

Votre outil pour cela est grep.

Par exemple, si vous voulez la ligne sur l'appareil /dev/sda3, vous tapez:

df -h | grep '/dev/sda3'

Si vous voulez que la ligne mentionne votre répertoire personnel comme point de montage, utilisez:

df -h | grep '/home'
Byte Commander
la source
3
Ou df -h /dev/sda3ou df -h /home(ce dernier fonctionne même s'il ne s'agit pas d'un point de montage).
Random832
6

Vous pouvez également utiliser perl:

df -h | perl -ne 'print if $.==3' 

Le $.est le numéro de ligne actuel, vous pouvez donc imprimer la Nième ligne avec perl -ne 'print if $.==N'.

terdon
la source
1
C'est pourquoi Perl est toujours pertinent à mon avis. Il combine sed et awk avec un langage de programmation structuré qui (alors que beaucoup diront qu'il est vraiment vraiment moche [et je pourrais être d'accord]) est au moins cohérent et très utile pour ces lignes courtes. Merci Terdon. C'est presque aussi succinct que l'exemple sed, bien qu'un peu plus verbeux.
Mike S
@MikeS ravi de vous aider. En tant que hacker Perl, cependant, je dois souligner que le code Perl est aussi laid que vous le faites. Les bons programmeurs peuvent écrire du beau code en Perl, c'est juste que la jauge ne vous force pas et c'est facile de ne pas le faire.
terdon
2

Ma première idée serait une construction tête-bêche.

Exemple:

df -h | head -3 | tail -1

head -3entraîne l'arrêt de la sortie après trois lignes et tail -1ne produit que la dernière ligne.

Alternativement, si vous savez à quoi ressemblera la sortie, vous pouvez également utiliser greppour trouver des lignes contenant une certaine chaîne.

Wayne_Yux
la source