web-dev-qa-db-fra.com

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

Je veux obtenir seulement, disons, la troisième ligne du résultat df -h.

Quel type de commande devrais-je utiliser?

16
emrecnl

Cela affichera la 3ème ligne, quel que soit le contenu.

df -h | sed -n 3p
31
user508889

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

Si vous avez l'intention d'analyser la sortie d'un script, vous devrez utiliser df -P pour garantir qu'elle ne sera jamais encapsulée 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 contenant des espaces)

16
Random832

Vous pouvez utiliser une combinaison de head et tail:

df -h | head -3 | tail -1

Ou

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

Cependant, notez que df permet de filtrer la sortie à partir des options de df, vous devriez les examiner avant d’utiliser une commande externe.

Vérifiez man df.

14
heemayl

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

df -h | awk 'NR == 3'
10

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).

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

Votre outil pour cela est grep.

Par exemple, si vous voulez la ligne à propos du périphérique /dev/sda3, vous tapez:

df -h | grep '/dev/sda3'

Si vous voulez que la ligne mentionnant votre répertoire personnel en tant que point de montage, utilisez:

df -h | grep '/home'
6
Byte Commander

Vous pouvez également utiliser Perl:

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

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

6
terdon

Ma première idée serait une construction front-tail.

Exemple:

df -h | head -3 | tail -1

head -3 provoque l'arrêt de la sortie après trois lignes et tail -1 n'affiche que la dernière ligne.

Sinon, si vous savez à quoi ressemblera la sortie, vous pouvez également utiliser grep pour rechercher les lignes contenant une certaine chaîne.

2
Wayne_Yux