Ich habe eine Textdatei. Aufgabe - erste und letzte Zeile aus Datei nachher holen
$ cat file | grep -E "1|2|3|4" | commandtoprint
$ cat file
1
2
3
4
5
Benötige dies ohne Katzenausgang (nur 1 und 5).
~$ cat file | tee >(head -n 1) >(wc -l)
1
2
3
4
5
5
1
Vielleicht gibt es awk und eine kürzere Lösung ...
wc -l
hat dies nichts mit der Ausgabe der letzten Zeile einer Datei zu tun.Antworten:
sed Lösung:
Beim Lesen von,
stdin
wenn wie folgt aussehen würde (zum Beispielps -ef
):Kopf & Schwanz Lösung:
Wenn Daten von einem Befehl (
ps -ef
) kommen:awk Lösung:
Und auch das Pipe-Beispiel mit
ps -ef
:quelle
(head -n1 file;tail -n1 file)
sehr großen Befehl und keine Pipe als letztes Symbol habe. Also| sed '1p;$!d'
kürzer.head && tail
wirklich für dich?seq 10 | (head -n1 && tail -n1)
druckt1
nur.-e 1b
- Verzweigen Sie in der ersten Zeile zum Ende des sed-Skripts, an welchem Punkt das implizite "Drucken" stattfindet. Wenn die Eingabe nur eine Zeile lang ist, endet sed. Andernfalls löschen Sie alle Zeilen mit Ausnahme der letzten. In der letzten Zeile wird das implizite "Drucken" erneut ausgeführt.sed
4.2.2. Prost.sed -n '1p;$p' file.txt
Gibt die erste und letzte Zeile der Datei file.txt aus.quelle
sed -e 1b -e '$!d'
wenn Sie das nicht wollen.Ein lustiger purer Bash≥4 Weg:
Danach haben Sie ein Array,
ary
in dem das erste Feld (dh der Index0
) die erste Zeilefile
und das letzte Feld die letzte Zeile von istfile
. Der Rückrufcb
(optional, wenn Sie alle Zeilen im Array schlürfen möchten) setzt alle Zwischenzeilen zurück, um den Speicher nicht zu überfrachten. Als freies Nebenprodukt haben Sie auch die Anzahl der Zeilen in der Datei (als letzter Index des Arrays + 1).Demo:
quelle
Mit
sed
Ihnen könnend
Linien , wenn ÉLETE NICHT die1
st ein UND NICHT der la$
t ein.Verwenden Sie
!
dieseNOT
Option, um eine Bedingung zu negieren, und dasX{Y..}
Konstrukt, umX
AND-Y
Bedingungen zu kombinieren :Oder Sie können einen Bereich von
2
nd bis la$
t verwenden und alle Zeilen in diesem Bereich mit Ausnahme der$
Zeile la t löschen :quelle
Perl benutzen:
Das obige druckt den ersten Eintrag in der Ausgabe von
seq 10
überif 1..1
, während dasor eof
auch den letzten Eintrag druckt.quelle
/etc
abrt
undyum.repos.d
haben diese frage zu tun?Ohne Katze:
oder
quelle
quelle