Come recuperare solo la linea necessaria dall'uscita del terminale?


16

Voglio solo dire la terza riga di df -houtput.

Che tipo di comando dovrei usare?


16
Nota per il futuro: questa domanda è molto basilare. È in genere incoraggiato a mostrare un certo sforzo e ciò che hai provato prima di chiedere.
Sergiy Kolodyazhnyy,

Mentre può essere legittimo ottenere la terza riga di un file con un formato statico presunto, che è diverso dalla terza riga di un programma di diagnostica con output che varia a seconda dello stato del sistema. Ad esempio, montare una nuova unità / partizione in ordine alfabetico prima che la terza riga corrente la salti. Quindi la risposta di @ Random832 qui sotto è la migliore.
MarkHu,

Risposte:


31

Questo produrrà la terza riga, indipendentemente dal contenuto.

df -h | sed -n 3p

+1 per risposta più piccolo: df -h|sed -n 3p.
EKons,

16

Il dfcomando accetta effettivamente un argomento che identifica il filesystem desiderato. Quindi potresti usare, per esempio, df /homeo df /dev/sda3.

Se intendi analizzare l'output di uno script, ti consigliamo di utilizzarlo df -Pper garantire che non venga mai eseguito il wrapping su più righe. Quindi, ad esempio, potresti usare df -Ph /home | tail -n +2(ma se stai analizzando l'output di uno script, fai attenzione alla possibilità di nomi di file con spazi)


2
Questo è tutto! Invece di analizzare l'output, utilizzare il comando per fornire esattamente ciò che si desidera.
fedorqui,

1
Ma l'OP ha detto che voleva la linea 3. df /homefornisce un'intestazione. Stai interpretando lo scopo dell'utente. Potresti avere ragione. Potresti sbagliarti, chi lo sa?
Mike S,

@MikeS Una dozzina di altre risposte hanno già coperto la linea 3 senza contesto. Ho fornito ulteriori informazioni in modo che l'OP le abbia se è utile per lui. E tail -n +2rimuove l'intestazione.
Casuale832

14

È possibile utilizzare una combinazione di heade tail:

df -h | head -3 | tail -1

O

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

Si noti che, dfconsente di filtrare l'output dalle opzioni di dfse stesso, è necessario esaminare quelli prima di utilizzare qualsiasi comando esterno.

Dai un'occhiata man df .


4
+1 per menzionare che df può filtrare voci specifiche
Sergiy Kolodyazhnyy

2
In effetti, è quasi sempre meglio filtrare i dati stessi prima di eseguire il piping a programmi esterni.
Zach Mertes,

10

Awk è uno strumento di elaborazione del testo, quindi è appropriato per questa attività

df -h | awk 'NR == 3'

6

Suppongo che non stai necessariamente cercando la terza linea, ma la linea che menziona un disco specifico (ad es /dev/sda3 ) o un punto di montaggio specifico (ad esempio /home).

Quindi, invece di visualizzare solo la terza riga, che non è sicura perché l'ordine di output potrebbe cambiare e potresti ottenere un risultato diverso, puoi filtrare l'output in base al contenuto e mostrare solo le righe che corrispondono a un modello specifico o contengono una parola chiave.

Il tuo strumento per questo è grep.

Ad esempio, se si desidera la riga sul dispositivo /dev/sda3, digitare:

df -h | grep '/dev/sda3'

Se vuoi che la riga menzioni la tua home directory come punto di montaggio, usa:

df -h | grep '/home'

3
Oppure df -h /dev/sda3oppure df -h /home(quest'ultimo funziona anche se non è un mount point).
Casuale 832

6

Puoi anche usare perl:

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

Il $.è il numero di riga corrente, così da poter stampare la linea ennesimo con perl -ne 'print if $.==N'.


1
Questo è il motivo per cui Perl è ancora rilevante a mio avviso. Combina sed e awk con un linguaggio di programmazione strutturato che (mentre molti diranno che è davvero brutto [e potrei essere d'accordo]) è almeno coerente e molto utile per questi brevi battiti. Grazie mille. Questo è quasi succinto come l'esempio sed, se un po 'più prolisso.
Mike S,

@MikeS felice di aiutarti. Come hacker Perl, tuttavia, devo sottolineare che il codice Perl è brutto solo come lo fai tu. I bravi programmatori possono scrivere un bellissimo codice in Perl, è solo che la lingua non ti costringe a farlo ed è facile non farlo.
Terdon,

2

La mia prima idea sarebbe una costruzione testa-coda.

Esempio:

df -h | head -3 | tail -1

head -3provoca l'arresto dell'uscita dopo tre righe e produce tail -1solo l'ultima riga.

In alternativa, se sai come apparirà l'output, puoi anche usare grepper trovare linee contenenti una determinata stringa.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.