Ruft die erste Zeile der Ausgabe eines Shell-Befehls ab

90

Beim Versuch, die Versionsnummer von zu lesen vim, erhalte ich viele zusätzliche Zeilen, die ich ignorieren muss. Ich habe versucht, das Handbuch von zu lesen headund habe den folgenden Befehl ausprobiert:

vim --version | head -n 1

Ich möchte wissen, ob dies der richtige Ansatz ist.

John Doe
quelle
4
Wie ist es gescheitert? Für mich geht das.
Choroba
1
Die Syntax ist korrekt. Was ist der Fehler?
Kaushik Nayak
1
Das funktioniert bei mir, aber vielleicht verwenden Sie eine Version von vim, die Versionsinformationen in stderr schreibt. Versuchen Sievim --version 2>&1 | sed 1q
William Pursell
Funktioniert auch für mich - also ja, Ihr Ansatz ist korrekt. :)Überprüfen Sie, ob Ihr Paket diese Informationen stderrals @WilliamPursell ausgibt .
David C. Rankin

Antworten:

123

Ja, das ist eine Möglichkeit, die erste Ausgabezeile eines Befehls abzurufen.

Wenn der Befehl einen Standardfehler ausgibt, den Sie auf dieselbe Weise erfassen möchten, müssen Sie den Standardfehler des Befehls in den Standardausgabestream umleiten:

utility 2>&1 | head -n 1

Es gibt viele andere Möglichkeiten, die erste Zeile zu erfassen, einschließlich sed 1q(Beenden nach der ersten Zeile), sed -n 1p(nur erste Zeile drucken, aber alles lesen), awk 'FNR == 1'(nur erste Zeile drucken, aber wieder alles lesen) usw.

Kusalananda
quelle
4

Ich würde ... benutzen:

awk 'FNR <= 1' file_*.txt

Wie @Kusalananda hervorhebt, gibt es viele Möglichkeiten, die erste Zeile in der Befehlszeile zu erfassen. Die Verwendung der head -n 1Option ist jedoch möglicherweise nicht die beste Option, wenn Platzhalter verwendet werden, da zusätzliche Informationen gedruckt werden. Durch Ändern 'FNR == i'auf 'FNR <= i'können die ersten i-Zeilen abgerufen werden.

Wenn Sie beispielsweise n Dateien mit dem Namen file_1.txt haben, ... file_n.txt:

awk 'FNR <= 1' file_*.txt

hello
...
bye

Bei headPlatzhaltern wird jedoch der Name der Datei gedruckt:

head -1 file_*.txt

==> file_1.csv <==
hello
...
==> file_n.csv <==
bye
Alemol
quelle
Siehehead -qn1 file_*.txt
F. Hauri