A Linux “ cat ” paranccsal hogyan jeleníthetek meg csak bizonyos sorokat
On február 15, 2021 by admin Ha a cat -n text.txt
kódot használom a sorok automatikus számozásához, akkor hogyan használhatom a parancsot csak bizonyos sorszámok megjelenítésére.
Megjegyzések
Válasz
Használja a sed
Használatot
$ cat file Line 1 Line 2 Line 3 Line 4 Line 5 Line 6 Line 7 Line 8 Line 9 Line 10
Egy sor nyomtatása (5)
$ sed -n 5p file Line 5
Több sor nyomtatása (5 & 8)
$ sed -n -e 5p -e 8p file Line 5 Line 8
Meghatározott tartomány (5 – 8) kinyomtatása
$ sed -n 5,8p file Line 5 Line 6 Line 7 Line 8
Tartomány nyomtatása más meghatározott sorokkal (5 – 8 & 10)
$ sed -n -e 5,8p -e 10p file Line 5 Line 6 Line 7 Line 8 Line 10
Válasz
Ennek egyik módja a sed
használata:
cat -n text.txt | sed "11d"
ahol 11 az eltávolítani kívánt sor száma.
Vagy távolítsa el az összeset, kivéve 11-et:
cat -n text.txt | sed "11!d"
Tartományok is lehetségesek:
cat -n text.txt | sed "9,12!d"
És cat -n
nem is szükséges:
sed "9,12!d" text.txt
Válasz
Ön egyenesen felfelé használhatja az awk-ot.
awk "NR==1" file.txt
az “1” helyettesítése a kívánt sorszámmal.
Megjegyzések
- Ez egymillió mérföldnyire a legjobb válasz itt, és sokkal több szeretetet érdemel, mint amennyi van.
Válasz
A céloktól függően szeretem a fejet vagy a grepet.
cat /var/log/syslog -n | head -n 50 | tail -n 10
a 41-től 50-ig terjedő sor jelenik meg.
vagy
cat /var/log/syslog -n | grep " 50" -b10 -a10
a 40-től 60-ig terjedő sorokat jeleníti meg. A grep módszerrel az a probléma, hogy számlát kell használnia a sorszámok kitöltéséhez (vegye figyelembe a szóközt).
Mindkettő nagyon hasznos a naplófájlok elemzéséhez.
Megjegyzések
- Egyik példának sem kell
cat
, bár - hát igen .. de …. de … ….. Vannak jobb módszerek is. A macska használatával kapcsolatban feltett kérdés tehát felhasználtam.
-
cat
' nem teheti meg azt, amit az OP akar
Válasz
Amint mások megmutatták neked, nem szükséges használni a cat -n
. Más programok megteszik az Ön számára. Ha azonban valóban elemeznie kell a cat -n
kimenetét, és csak meghatározott sorokat kell megjelenítenie (például 4-8, 12 és 42), akkor megteheti:
$ 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
A awk
mezőben a $1
az első mező, ezért ez a parancs kinyomtatja minden olyan sor, amelynek első mezői i) 4 és 8 között (beleértve) vagy ii) 12 vagy iii) 42.
Ha el akarja távolítani a cat -n
az eredeti sorok megszerzéséhez a fájlból megteheti:
$ 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
megjegyzések
- Nem lehet ' t, ha
NR
-t használ a$1
?
cat -n
használatával demonstráltam, hogyan gondoltam, azt a kimenetet használom, amelyet a cat -n
nyújt .
Válasz
A sed használatával csak egy szám és l látható oop ezt egy for ciklussal:
for line in 1 3 7 11; do sed -n ${line}p text.txt; done
tail
+head
is megteheti ezt, akárcsakawk