Jeśli mogę użyć cat -n text.txt
, aby automatycznie numeruje linie, jak mogę następnie użyć polecenia, aby pokazać tylko niektóre ponumerowanych linii.
text-processing
cat
Geckono1
źródło
źródło
tail
+head
Można również to zrobić, jak możnaawk
Odpowiedzi:
Posługiwać się
sed
Stosowanie
Aby wydrukować jedną linię (5)
Aby wydrukować wiele linii (5 i 8)
Aby wydrukować określony zakres (5–8)
Aby wydrukować zakres z inną określoną linią (5-8 i 10)
źródło
Jednym ze sposobów na to jest użycie
sed
:gdzie 11 to numer linii, którą chcesz usunąć.
Lub usunąć wszystkie oprócz 11:
Możliwe są również zakresy:
I
cat -n
nawet nie jest potrzebny:źródło
Możesz użyć awk prosto w górę.
zastępując „1” żądanym numerem linii.
źródło
W zależności od celów lubię głowę lub grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
zwróci linie od 41 do 50.
lub
cat /var/log/syslog -n | grep " 50" -b10 -a10
pokaże linie od 40 do 60. Problem z metodą grep polega na tym, że musisz używać konta do uzupełniania numerów linii (zauważ spację)
Oba są bardzo przydatne do analizowania plików dziennika.
źródło
cat
jednakcat
nie może robić tego, co chce OPJak pokazali ci inni, nie ma potrzeby używania
cat -n
. Inne programy zrobią to za Ciebie. Jeśli jednak naprawdę musisz przeanalizować dane wyjściowecat -n
i wyświetlić tylko określone wiersze (na przykład 4-8, 12 i 42), możesz:W
awk
,$1
to pierwszy obszar, tak więc polecenie drukuje linie, których pierwsze pola są i) od 4 do 8 (włącznie) lub ii), iii) 12 lub 42.Jeśli chcesz również usunąć pole dodane przez,
cat -n
aby uzyskać oryginalne wiersze z pliku, możesz:źródło