@steeldriver Sie müssen eine Antwort erstellen, da dies der Weg ist, dies mit grep, einem seltsam ausgewählten Tool für den Job, zu tun.
MelBurslan
1
grepist nicht das beste Werkzeug zum Drucken der ersten Zeile einer Datei. Wenn Sie einfach gemeint haben, dass Sie die erste übereinstimmende Zeile drucken möchten grep, oder wenn Sie einen bestimmten Verwendungszweck haben grep, teilen Sie uns dies bitte mit. Wenn wir mehr Kontext hätten, könnten wir vielleicht eine Antwort geben, die Ihnen und der Community besser helfen würde.
DKing
@ MelBurslan In file.txt habe ich zum Beispiel drei Zeilen: Dies ist eine neue Datei. Zweite Zeile: Der Name der Datei ist newFile Dritte Zeile: Ich habe die neue Zeile nicht erstellt. Wie kann ich mit dem Befehl grep nur die erste Zeile drucken? Wie kann ich mit welchem Befehl die erste und die letzte Zeile drucken? Könnt ihr mir bitte die Befehle für beide Fragen mitteilen?
Nithin Santhosh
Wenn eine der vorhandenen Antworten Ihr Problem löst, akzeptieren Sie diese bitte über das Häkchen. Vielen Dank!
Jeff Schaller
Antworten:
36
Obwohl es sich um eine unkonventionelle Anwendung von grep handelt, können Sie sie mit verwenden
grep -m1 "" file.txt
Es funktioniert, weil der leere Ausdruck mit irgendetwas übereinstimmt, während -m1grep nach der ersten Übereinstimmung beendet wird
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
+1 für den Beweis, dass mit Schokolade überzogene Bananen hier nicht so nutzlos sind, wie ich dachte.
Kamil Maciorowski
4
Das könnte auf einigen Systemen funktionieren, ist aber nicht portabel:grep: unknown option -- m
Kusalananda
1
Beachten Sie den Unterschied zwischen "Erste Zeile" und "Erste Zeile abgestimmt"
Charles
13
Das ist etwas, was nicht grepgeht. Der Name "grep" selbst ist ein Akronym für " global nach regulären Ausdrücken suchen und drucken", wie es der edBefehl g/re/ptut (für einen bestimmten regulären Ausdruck re).
edist ein interaktiver Zeileneditor aus dem Jahr 1969, der jedoch höchstwahrscheinlich heute auf Ihrem System installiert ist. Wir haben grepvon ed, und es kann als eine Abkürzung oder ein Alias für eine bestimmte Funktionalität von edund gesehen werden sed, die "stream- ed" ist, dh ein (nicht interaktiver) Stream-Editor.
Verwenden wir sedstattdessen:
$ sed -n '1p' file.txt
Die 1pZeichenfolge ist ein winziges sed"Skript", pdas die Zeile ausgibt ( ), die der angegebenen Adresse ( 1, der ersten Zeile) entspricht. Der Editierbefehl 1pwürde edübrigens (keine Überraschung) das Gleiche im Editor tun .
Das -nunterdrückt die Ausgabe von irgendetwas, das nicht explizit vom Skript gedruckt wird, so dass wir nur die erste Zeile der Datei erhalten file.txt.
Alternative:
$ sed '1q' file.txt
Dies druckt alle Zeilen der Datei, beendet ( q) jedoch in Zeile 1 (nach dem Drucken). Das ist genau gleichbedeutend mit head -n 1 file.txt.
Im POSIX-Standard heißt es (verallgemeinernd), dass head -n Nes ungefähr so ist wie sed 'Nq'"jede Zeile drucken, aber in der Zeile beenden N". Der Grund, headder überhaupt in den Standard aufgenommen wurde, lag in der Symmetrie mit tail(und in der Abwärtskompatibilität mit vorhandenen Unix-Implementierungen).
Dies ist die aufschlussreichste Antwort, die erste Antwort ist ein seltsamer Hack. Ich wusste, dass es etwas Seltsames gibt, danke, dass du mir die Geschichte von Grep und Ed gezeigt hast. Es macht jetzt alles Sinn.
Tomas Zubiri
6
Solange die erste Zeile keine eindeutige Zeichenfolge enthält, können Sie dies nicht nur mit grep tun. head -n 1 file.txtwürde an seiner Stelle arbeiten.
Wenn Sie die erste Zeile nur ausdrucken möchten, wenn sie mit einem Muster übereinstimmt, setzen Sie die Pipe head auf grep
Noch eine unkonventionelle Verwendung von Grep - eine Schwartzsche Transformation , die mehrere Kreisel durchläuft, um die Zeilen zu nummerieren. Anschließend sucht sie mit grep nach der Zeilennummer und entfernt die Zeilennummer wieder:
Ich füge diese Antwort hier als Beispiel für die Idee ein, dass nur, weil Sie etwas tun können (grep oder bash oder ... usw.), nicht bedeutet, dass Sie sollten - es gibt wahrscheinlich ein besseres Werkzeug für den Job. sed ( sed 1qoder sed -n 1p) und head ( head -n 1) sind die am besten geeigneten Werkzeuge zum Drucken der ersten Zeile aus einer Datei. Zum Drucken der letzten Zeile einer Datei haben Sie tail -n 1odersed -n '$p'. Diese Tools sind nicht nur ein einziger Befehl (anstelle von 3+ in den oben genannten Funktionen), sondern auch für zukünftige Leser - vielleicht sogar für Sie selbst! - der Skripte, in denen sie sich befinden. Obwohl ich nicht einer der (derzeit 3) Abwähler Ihrer Frage bin, ist es wahrscheinlich, dass Ihr Beharren auf einem willkürlichen Tool für den Job (ohne Begründung) der Grund dafür ist die downvotes. Es ist äußerst unwahrscheinlich , dass ein System , das hat grepauch nicht hat head, tailund sed.
head -1 file.txt
nicht funktionierengrep
ist nicht das beste Werkzeug zum Drucken der ersten Zeile einer Datei. Wenn Sie einfach gemeint haben, dass Sie die erste übereinstimmende Zeile drucken möchtengrep
, oder wenn Sie einen bestimmten Verwendungszweck habengrep
, teilen Sie uns dies bitte mit. Wenn wir mehr Kontext hätten, könnten wir vielleicht eine Antwort geben, die Ihnen und der Community besser helfen würde.Antworten:
Obwohl es sich um eine unkonventionelle Anwendung von grep handelt, können Sie sie mit verwenden
Es funktioniert, weil der leere Ausdruck mit irgendetwas übereinstimmt, während
-m1
grep nach der ersten Übereinstimmung beendet wirdquelle
grep: unknown option -- m
Das ist etwas, was nicht
grep
geht. Der Name "grep" selbst ist ein Akronym für " global nach regulären Ausdrücken suchen und drucken", wie es dered
Befehlg/re/p
tut (für einen bestimmten regulären Ausdruckre
).ed
ist ein interaktiver Zeileneditor aus dem Jahr 1969, der jedoch höchstwahrscheinlich heute auf Ihrem System installiert ist. Wir habengrep
voned
, und es kann als eine Abkürzung oder ein Alias für eine bestimmte Funktionalität voned
und gesehen werdensed
, die "stream-ed
" ist, dh ein (nicht interaktiver) Stream-Editor.Verwenden wir
sed
stattdessen:Die
1p
Zeichenfolge ist ein winzigessed
"Skript",p
das die Zeile ausgibt ( ), die der angegebenen Adresse (1
, der ersten Zeile) entspricht. Der Editierbefehl1p
würdeed
übrigens (keine Überraschung) das Gleiche im Editor tun .Das
-n
unterdrückt die Ausgabe von irgendetwas, das nicht explizit vom Skript gedruckt wird, so dass wir nur die erste Zeile der Datei erhaltenfile.txt
.Alternative:
Dies druckt alle Zeilen der Datei, beendet (
q
) jedoch in Zeile 1 (nach dem Drucken). Das ist genau gleichbedeutend mithead -n 1 file.txt
.Im POSIX-Standard heißt es (verallgemeinernd), dass
head -n N
es ungefähr so ist wiesed 'Nq'
"jede Zeile drucken, aber in der Zeile beendenN
". Der Grund,head
der überhaupt in den Standard aufgenommen wurde, lag in der Symmetrie mittail
(und in der Abwärtskompatibilität mit vorhandenen Unix-Implementierungen).quelle
Solange die erste Zeile keine eindeutige Zeichenfolge enthält, können Sie dies nicht nur mit grep tun.
head -n 1 file.txt
würde an seiner Stelle arbeiten.Wenn Sie die erste Zeile nur ausdrucken möchten, wenn sie mit einem Muster übereinstimmt, setzen Sie die Pipe head auf grep
head -n 1 * | grep [pattern]
quelle
Noch eine unkonventionelle Verwendung von Grep - eine Schwartzsche Transformation , die mehrere Kreisel durchläuft, um die Zeilen zu nummerieren. Anschließend sucht sie mit grep nach der Zeilennummer und entfernt die Zeilennummer wieder:
Ich füge diese Antwort hier als Beispiel für die Idee ein, dass nur, weil Sie etwas tun können (grep oder bash oder ... usw.), nicht bedeutet, dass Sie sollten - es gibt wahrscheinlich ein besseres Werkzeug für den Job. sed (
sed 1q
odersed -n 1p
) und head (head -n 1
) sind die am besten geeigneten Werkzeuge zum Drucken der ersten Zeile aus einer Datei. Zum Drucken der letzten Zeile einer Datei haben Sietail -n 1
odersed -n '$p'
. Diese Tools sind nicht nur ein einziger Befehl (anstelle von 3+ in den oben genannten Funktionen), sondern auch für zukünftige Leser - vielleicht sogar für Sie selbst! - der Skripte, in denen sie sich befinden. Obwohl ich nicht einer der (derzeit 3) Abwähler Ihrer Frage bin, ist es wahrscheinlich, dass Ihr Beharren auf einem willkürlichen Tool für den Job (ohne Begründung) der Grund dafür ist die downvotes. Es ist äußerst unwahrscheinlich , dass ein System , das hatgrep
auch nicht hathead
,tail
undsed
.quelle