Wie rufe ich nur die benötigte Leitung von der Terminalausgabe ab?

16

Ich möchte nur die dritte df -hAusgabezeile bekommen.

Welche Art von Befehl soll ich verwenden?

emrecnl
quelle
16
Hinweis für die Zukunft: Diese Frage ist sehr, sehr grundlegend. Es wird in der Regel empfohlen, bestimmte Anstrengungen zu zeigen und anzugeben, was Sie versucht haben, bevor Sie gefragt haben.
Sergiy Kolodyazhnyy
Während es legitim sein kann, die 3. Zeile einer Datei mit einem vermuteten statischen Format abzurufen, unterscheidet sich dies von der 3. Zeile eines Diagnoseprogramms mit einer Ausgabe, die je nach Systemstatus unterschiedlich ist. Zum Beispiel mounten Sie ein neues Laufwerk / eine neue Partition alphabetisch, bevor Ihre aktuelle dritte Zeile sie durchbrennt. Somit ist die Antwort von @ Random832 unten die beste.
MarkHu

Antworten:

31

Dies gibt die 3. Zeile unabhängig vom Inhalt aus.

df -h | sed -n 3p
muru
quelle
+1 für kleinste Antwort: df -h|sed -n 3p.
EKons
16

Der dfBefehl akzeptiert tatsächlich ein Argument, das das gewünschte Dateisystem angibt. So könnten Sie zum Beispiel df /homeoder verwenden df /dev/sda3.

Wenn Sie die Ausgabe für ein Skript analysieren möchten, sollten Sie df -Psicherstellen, dass es niemals in mehrere Zeilen umgebrochen wird. Sie könnten zum Beispiel Folgendes verwenden df -Ph /home | tail -n +2(aber wenn Sie die Ausgabe für ein Skript analysieren, müssen Sie sich der Möglichkeit bewusst sein, dass Dateinamen Leerzeichen enthalten).

Random832
quelle
2
Das ist es! Verwenden Sie den Befehl, um genau das bereitzustellen, was Sie möchten, anstatt die Ausgabe zu analysieren .
Fedorqui
1
Aber das OP sagte, er wollte Zeile 3. df /homebietet einen Header. Sie interpretieren den Zweck des Benutzers. Du könntest Recht haben. Sie können sich irren, wer weiß?
Mike S
@MikeS Ein Dutzend andere Antworten betrafen bereits das Abrufen von Zeile 3 ohne Kontext. Ich habe zusätzliche Informationen zur Verfügung gestellt, damit das OP sie erhält, wenn sie für ihn nützlich sind. Und tail -n +2entfernt den Header.
Random832
14

Sie können eine Kombination aus headund verwenden tail:

df -h | head -3 | tail -1

Oder

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

Beachten Sie jedoch, dass Sie sich diese zuerst ansehen sollten, bevor Sie einen externen Befehl verwenden df, um die Ausgabe aus den eigenen Optionen dfherauszufiltern.

Überprüfen Sie man df.

heemayl
quelle
4
+1 um zu erwähnen, dass df bestimmte Einträge filtern kann
Sergiy Kolodyazhnyy
2
In der Tat ist es fast immer besser, die Daten selbst zu filtern, bevor sie an externe Programme weitergeleitet werden.
Zach Mertes
10

Awk ist ein Textverarbeitungsprogramm, das für diese Aufgabe geeignet ist

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

Ich gehe davon aus, dass Sie nicht unbedingt nach der dritten Zeile suchen, sondern nach der Zeile, in der entweder ein bestimmter Datenträger (z. B. /dev/sda3) oder ein bestimmter Einhängepunkt (z /home. B. ) angegeben ist.

Anstatt nur die dritte Zeile anzuzeigen, die unsicher ist, weil sich die Ausgabereihenfolge möglicherweise ändert und Sie ein anderes Ergebnis erhalten, können Sie die Ausgabe nach Inhalt filtern und nur die Zeilen anzeigen, die einem bestimmten Muster entsprechen oder ein Schlüsselwort enthalten.

Ihr Werkzeug dafür ist grep.

Wenn Sie beispielsweise die Zeile über das Gerät anzeigen möchten /dev/sda3, geben Sie Folgendes ein:

df -h | grep '/dev/sda3'

Wenn Sie möchten, dass die Zeile Ihr Home-Verzeichnis als Mount-Punkt enthält, verwenden Sie:

df -h | grep '/home'
Byte Commander
quelle
3
Oder df -h /dev/sda3oder df -h /home(Letzteres funktioniert auch, wenn es sich nicht um einen Einhängepunkt handelt).
Random832
6

Sie könnten auch verwenden perl:

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

Dies $.ist die aktuelle Zeilennummer, mit der Sie die n-te Zeile drucken können perl -ne 'print if $.==N'.

terdon
quelle
1
Aus diesem Grund ist Perl aus meiner Sicht immer noch relevant. Es kombiniert sed und awk mit einer strukturierten Programmiersprache, die (wie viele sagen werden) zumindest konsistent und sehr nützlich für diese kurzen Einzeiler ist. Vielen Dank, Terdon. Dies ist fast so prägnant wie das Beispiel sed, wenn auch etwas ausführlicher.
Mike S
@MikeS hilft gerne weiter. Als Perl-Hacker muss ich jedoch darauf hinweisen, dass Perl-Code nur so hässlich ist, wie Sie es machen. Gute Programmierer können wunderbaren Code in Perl schreiben, nur dass die Sprache Sie nicht dazu zwingt und es einfach ist, dies nicht zu tun.
Terdon
2

Meine erste Idee wäre ein Kopf-Schwanz-Konstrukt.

Beispiel:

df -h | head -3 | tail -1

head -3bewirkt, dass die Ausgabe nach drei Zeilen gestoppt wird und tail -1nur die letzte Zeile ausgegeben wird.

Wenn Sie wissen, wie die Ausgabe aussehen wird, können Sie alternativ auch grepnach Zeilen suchen, die eine bestimmte Zeichenfolge enthalten.

Wayne_Yux
quelle