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?


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

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


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.


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


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'

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


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.