Gibt es eine "kanonische" Möglichkeit, das zu tun? Ich habe head -n | tail -1
benutzt, was auch funktioniert, aber ich habe mich gefragt, ob es ein Bash-Tool gibt, das speziell eine Zeile (oder einen Bereich von Zeilen) aus einer Datei extrahiert.
Mit "kanonisch" meine ich ein Programm, dessen Hauptfunktion darin besteht, dies zu tun.
head
und pipe mit tail
wird bei einer großen Datei langsam sein. Ich würde sed
wie folgt vorschlagen:
sed 'NUMq;d' file
Wobei NUM
die Nummer der Zeile ist, die Sie ausdrucken wollen; also zum Beispiel sed '10q;d' file
, um die 10te Zeile von file
zu drucken.
Erläuterung:
NUMq
wird sofort beendet, wenn die Zeilennummer NUM
ist.
d
löscht die Zeile, anstatt sie zu drucken; dies wird bei der letzten Zeile verhindert, weil q
den Rest des Skripts beim Beenden überspringt.
Wenn Sie NUM
in einer Variablen haben, sollten Sie doppelte Anführungszeichen anstelle von einfachen verwenden:
sed "${NUM}q;d" file
sed -n '2p' < file.txt
wird 2. Zeile drucken
sed -n '2011p' < file.txt
sed -n '10,33p' < file.txt
Zeile 10 bis Zeile 33
sed -n '1p;3p' < file.txt
und so weiter...
Für das Hinzufügen von Zeilen mit sed, können Sie dies überprüfen:
Sie können dafür auch Perl verwenden:
perl -wnl -e '$.== NUM && print && exit;' some.file