12 kasulikku käsku teksti filtreerimiseks tõhusate failitoimingute jaoks Linuxis


Selles artiklis vaatame läbi mitmeid käsurea tööriistu, mis toimivad Linuxis filtritena. Filter on programm, mis loeb standardsisendit, sooritab sellega toimingu ja kirjutab tulemused standardväljundisse.

Sel põhjusel saab seda kasutada teabe töötlemiseks võimsatel viisidel, näiteks väljundi ümberkorraldamine kasulike aruannete loomiseks, failide teksti muutmine ja paljud muud süsteemihalduse ülesanded.

Sellega seoses on allpool toodud mõned kasulikud faili- või tekstifiltrid Linuxis.

1. Awk käsk

Awk on tähelepanuväärne mustrite skannimise ja töötlemise keel, seda saab kasutada kasulike filtrite loomiseks Linuxis. Seda saate hakata lugema läbi meie Awk-sarja 1. osa kuni 13. osa.

Lisaks lugege lisateavet ja kasutusvalikuid ka awk-i manulehelt

$ man awk

2. Sed käsk

sed on võimas voo redaktor teksti filtreerimiseks ja teisendamiseks. Oleme sed-i kohta juba kirjutanud kaks kasulikku artiklit, mida saate siit läbi vaadata:

  1. Kuidas kasutada GNU ‘sed’ käsku Linuxi failide loomiseks, muutmiseks ja manipuleerimiseks
  2. 15 kasulikku käsutamisnõuannet „sed” igapäevaste Linuxi süsteemihalduse ülesannete jaoks

Sed-i manulehel on lisatud juhtimisvalikud ja juhised:

$ man sed

3. Käsud Grep, Egrep, Fgrep, Rgrep

Need filtreerivad antud mustriga sobivad väljundjooned. Nad loevad failist või standardsisendist ridu ja printivad vaikimisi kõik sobivad read standardväljundisse.

Märkus. Põhiprogramm kasutab spetsiifilisi grep-valikuid nagu allpool (ja neid kasutatakse endiselt tagasiühilduvuse tagamiseks):

$ egrep = grep -E
$ fgrep = grep -F
$ rgrep = grep -r  

Allpool on toodud mõned põhilised grep-käsud:

[email  ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

[email  ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Lisateavet Linuxi Grepi, Egrepi ja Fgrepi vaheliste erinevuste kohta saate lugeda.

4. juhtkäsk

head kasutatakse faili esimeste osade kuvamiseks, see väljastab vaikimisi esimesed 10 rida. Lipu -n num abil saate määrata kuvatavate ridade arvu:

[email  ~ $ head /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:55:01 TecMint CRON[4099]: pam_unix(cron:session): session closed for user root
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 11:05:01 TecMint CRON[4138]: pam_unix(cron:session): session closed for user root
Jan  2 11:09:01 TecMint CRON[4146]: pam_unix(cron:session): session opened for user root by (uid=0)

[email  ~ $ head  -n 5 /var/log/auth.log  
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan  2 10:45:01 TecMint CRON[3383]: pam_unix(cron:session): session closed for user root
Jan  2 10:51:34 TecMint sudo:  tecmint : TTY=unknown ; PWD=/home/tecmint ; USER=root ; COMMAND=/usr/lib/linuxmint/mintUpdate/checkAPT.py
Jan  2 10:51:34 TecMint sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
Jan  2 10:51:39 TecMint sudo: pam_unix(sudo:session): session closed for user root

Siit saate teada, kuidas kasutada Linuxis tõhusaks kasutamiseks pea- ja saba- ja kassi käske.

5. saba käsk

tail väljastab faili viimased osad (vaikimisi 10 rida). Kasutage kuvatavate ridade arvu määramiseks lülitit -n num.

Allolev käsk väljastab määratud faili viimased 5 rida:

[email  ~ $ tail -n 5 /var/log/auth.log
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Lisaks on sabal spetsiaalne valik -f faili muudatuste (eriti logifailide) reaalajas vaatamiseks.

Järgmine käsk võimaldab teil jälgida määratud faili muudatusi:

[email  ~ $ tail -f /var/log/auth.log
Jan  6 12:58:01 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 12:58:11 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 12:58:12 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Received SIGHUP; restarting.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on 0.0.0.0 port 22.
Jan  6 13:01:27 TecMint sshd[1269]: Server listening on :: port 22.

Kasutamisvalikute ja juhiste täieliku loendi leiate loendist tail man.

$ man tail

6. sorteeri käsk

sortimist kasutatakse tekstifaili ridade sortimiseks või standardsisest sisendist.

Allpool on faili nimega domains.list sisu:

[email  ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

Faili sisu sortimiseks saate käivitada lihtsa sortimise käsu:

[email  ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.linux-console.net
news.linux-console.net
linux-console.net
linux-console.net
windowsmint.com
windowsmint.com

Sordi käsku saate kasutada mitmel viisil, käige mõned kasulikud artiklid käsust Sorteerimine järgmiselt:

  1. 14 kasulikku näidet Linuxi käskude sortimisest - 1. osa
  2. 7 huvitavat Linuxi käsku "sortimine" - 2. osa
  3. Kuidas leida ja sortida faile muutmise kuupäeva ja kellaaja järgi
  4. Kuidas sortida käsu 'ls väljund viimati muudetud kuupäeva ja kellaaja järgi

7. uniqi käsk

käsku uniq kasutatakse korduvate ridade teatamiseks või välja jätmiseks, see filtreerib read standardsisest sisendist ja kirjutab tulemuse standardväljundisse.

Pärast sortimise käivitamist sisendvoos saate korduvad read uniq-iga eemaldada, nagu allpool toodud näites.

Rea esinemiste arvu näitamiseks kasutage valikut -c ja ignoreerige erinevusi juhul, kui võrdlete, lisades valiku -i :

[email  ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

[email  ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Täiendava kasutusteabe ja märkide saamiseks lugege läbi uniqi manuleht

$ man uniq

8. fmt käsk

fmt lihtne optimaalne teksti vormindaja, see vormindab lõigud määratud failis ümber ja prindib tulemused standardväljundisse.

Järgmine on failist domain-list.txt eraldatud sisu:

1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

Ülaltoodud sisu vormindamiseks standardseks loendiks käivitage järgmise käsu maksimaalse rea laiuse määramiseks lülitiga -w :

[email  ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

[email  ~ $ fmt -w 1 domain-list.txt
1.linux-console.net 
2.news.linux-console.net 
3.linuxsay.com 
4.windowsmint.com

9. pr Käsklus

käsk pr teisendab tekstifailid või standardse sisendi printimiseks. Näiteks Debiani süsteemides saate kõik installitud paketid loetleda järgmiselt:

$ dpkg -l

Loendi korrastamiseks printimiseks valmis lehtedena ja veergudena väljastage järgmine käsk.

[email  ~ $ dpkg -l | pr --columns 3 -l 20  

2017-01-06 13:19                                                  Page 1


Desired=Unknown/Install ii  adduser		ii  apg
| Status=Not/Inst/Conf- ii  adwaita-icon-theme	ii  app-install-data
|/ Err?=(none)/Reinst-r ii  adwaita-icon-theme- ii  apparmor
||/ Name		ii  alsa-base		ii  apt
+++-=================== ii  alsa-utils		ii  apt-clone
ii  accountsservice	ii  anacron		ii  apt-transport-https
ii  acl			ii  apache2		ii  apt-utils
ii  acpi-support	ii  apache2-bin		ii  apt-xapian-index
ii  acpid		ii  apache2-data	ii  aptdaemon
ii  add-apt-key		ii  apache2-utils	ii  aptdaemon-data


2017-01-06 13:19                                                  Page 2


ii  aptitude		ii  avahi-daemon	ii  bind9-host
ii  aptitude-common	ii  avahi-utils		ii  binfmt-support
ii  apturl		ii  aview		ii  binutils
ii  apturl-common	ii  banshee		ii  bison
ii  archdetect-deb	ii  baobab		ii  blt
ii  aspell		ii  base-files		ii  blueberry
ii  aspell-en		ii  base-passwd		ii  bluetooth
ii  at-spi2-core	ii  bash		ii  bluez
ii  attr		ii  bash-completion	ii  bluez-cups
ii  avahi-autoipd	ii  bc			ii  bluez-obexd

.....

Siin kasutatavad lipud on:

  1. --column määratleb väljundis loodud veergude arvu.
  2. -l määrab lehe pikkuse (vaikimisi on 66 rida).

10. tr Käsk

See tööriist tõlgib või kustutab märgid standardsisendist ja kirjutab tulemused standardväljundisse.

Tr-i süntaks on järgmine:

$ tr options set1 set2

Vaadake allpool toodud näiteid, esimeses käsus tähistab set1 ([: upper:]) sisendmärkide juhtumit (kõik suurtähed).

Seejärel tähistab set2 ([: lower:]) juhtumit, kus tulemuseks olevad märgid on. See on sama näide teises näites ja põgenemisjärjestus \n tähendab uue rea prindiväljundit:

[email  ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
linux-console.net

[email  ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. veel käsk

rohkem käsk on kasulik failide tutvumise filter, mis on loodud põhiliselt sertifikaatide vaatamiseks. See näitab faili sisu sellisel kujul nagu leht, kus kasutajad saavad lisateabe vaatamiseks vajutada [Enter].

Selle abil saate vaadata selliseid suuri faile:

[email  ~ $ dmesg | more
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic ([email ) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
--More--

12. vähem käsku

vähem on ülaltoodud käsu vastand, kuid see pakub lisavõimalusi ja suurte failidega on see veidi kiirem.

Kasutage seda samamoodi nagu rohkem:

[email  ~ $ dmesg | less
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic ([email ) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic
 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=bb29dda3-bdaa-4b39-86cf-4a6dc9634a1b ro quiet splash vt.handoff=7
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009d3ff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009d400-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000e0000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000a56affff] usable
[    0.000000] BIOS-e820: [mem 0x00000000a56b0000-0x00000000a5eaffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000a5eb0000-0x00000000aaabefff] usable
:

Siit saate teada, miks Linuxis failide navigeerimiseks on käsk "vähem" kui kiirem kui "rohkem".

Praegu on see kõik, andke meile teada kõigist siin nimetamata kasulikest käsurea tööriistadest, mis toimivad Linuxi tekstifiltritena alloleva kommentaaride jaotise kaudu.