Wenn ich cat -n text.txt
die Zeilen automatisch nummeriere, wie verwende ich dann den Befehl, um nur bestimmte nummerierte Zeilen anzuzeigen.
tail
+ head
kann dies auch tun, wie kannawk
Wenn ich cat -n text.txt
die Zeilen automatisch nummeriere, wie verwende ich dann den Befehl, um nur bestimmte nummerierte Zeilen anzuzeigen.
tail
+ head
kann dies auch tun, wie kannawk
Antworten:
Verwenden sed
Verwendungszweck
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Eine Zeile drucken (5)
$ sed -n 5p file
Line 5
So drucken Sie mehrere Zeilen (5 und 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
So drucken Sie einen bestimmten Bereich (5 - 8)
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
So drucken Sie den Bereich mit einer anderen bestimmten Zeile (5 - 8 & 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
Eine Möglichkeit ist die Verwendung von sed
:
cat -n text.txt | sed '11d'
Dabei ist 11 die Nummer der zu entfernenden Zeile.
Oder entfernen Sie alle bis auf 11:
cat -n text.txt | sed '11!d'
Bereiche sind auch möglich:
cat -n text.txt | sed '9,12!d'
Und cat -n
wird nicht einmal benötigt:
sed '9,12!d' text.txt
Je nach Ziel mag ich Kopf oder Grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
Gibt die Zeilen 41 bis 50 zurück.
oder
cat /var/log/syslog -n | grep " 50" -b10 -a10
zeigt die Zeilen 40 bis 60 an. Das Problem bei der grep-Methode ist, dass Sie das Konto zum Auffüllen der Zeilennummern verwenden müssen (beachten Sie das Leerzeichen)
Beide sind sehr praktisch zum Parsen von Protokolldateien.
cat
jedoch
cat
kann nicht tun, was die OP will
Wie andere Ihnen gezeigt haben, besteht keine Notwendigkeit zu verwenden cat -n
. Andere Programme erledigen das für Sie. Wenn Sie jedoch die Ausgabe wirklich analysieren cat -n
und nur bestimmte Zeilen anzeigen müssen (z. B. 4-8, 12 und 42), können Sie Folgendes tun:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
4 Line 4
5 Line 5
6 Line 6
7 Line 7
8 Line 8
12 Line 12
42 Line 42
In awk
, $1
ist das erste Feld, so dass dieser Befehl alle Zeilen ausgibt, deren erste Felder i) zwischen 4 und 8 (einschließlich) oder ii) 12 oder iii) 42 sind.
Wenn Sie auch das Feld entfernen möchten, das hinzugefügt wurde cat -n
, um die ursprünglichen Zeilen aus der Datei zu erhalten, können Sie Folgendes tun:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42