12 uporabnih ukazov za filtriranje besedila za učinkovito delovanje datotek v Linuxu


V tem članku bomo pregledali številna orodja ukazne vrstice, ki v Linuxu delujejo kot filtri. Filter je program, ki bere standardni vhod, na njem izvede operacijo in rezultate zapiše v standardni izhod.

Iz tega razloga se lahko uporablja za obdelavo informacij na močne načine, kot je prestrukturiranje izhodnih podatkov za ustvarjanje koristnih poročil, spreminjanje besedila v datotekah in številne druge naloge skrbništva sistema.

Spodaj je nekaj uporabnih datotek ali besedilnih filtrov v Linuxu.

1. Ukaz Awk

Awk je izjemen jezik za skeniranje in obdelavo vzorcev, ki ga lahko uporabimo za izdelavo uporabnih filtrov v Linuxu. Uporabite ga lahko tako, da preberete našo serijo Awk od 1. do 13. dela.

Za več informacij in možnosti uporabe preberite tudi stran z navodili za uporabo awk:

$ man awk

2. Sed Command

sed je močan urejevalnik tokov za filtriranje in preoblikovanje besedila. O sed smo že napisali dva uporabna članka, ki jih lahko preberete tukaj:

  1. Kako uporabiti ukaz GNU ‘sed’ za ustvarjanje, urejanje in upravljanje datotek v Linuxu
  2. 15 uporabnih nasvetov in trikov za sedanje ukaze za vsakodnevna sistemska opravila za sistem Linux

Na strani sed man so dodane možnosti nadzora in navodila:

$ man sed

3. Ukazi Grep, Egrep, Fgrep, Rgrep

Ti filtri izpisujejo vrstice, ki se ujemajo z danim vzorcem. Berejo vrstice iz datoteke ali standardnega vhoda in vse ustrezne vrstice privzeto natisnejo na standardni izhod.

Opomba: Glavni program uporablja posebne možnosti grep, kot je prikazano spodaj (in se še vedno uporabljajo za povratno združljivost):

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

Spodaj je nekaj osnovnih ukazov grep:

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

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

Si lahko preberete več o tem, kakšna je razlika med Grep, Egrep in Fgrep v Linuxu ?.

4. glava ukaz

head se uporablja za prikaz prvih delov datoteke, privzeto prikaže prvih 10 vrstic. Z zastavico -n num lahko določite število vrstic za prikaz:

[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

Naučite se uporabljati ukaz head z ukazi tail in cat za učinkovito uporabo v Linuxu.

5. rep ukaz

tail prikaže zadnje dele (privzeto 10 vrstic) datoteke. S stikalom -n num določite število vrstic, ki jih želite prikazati.

Spodnji ukaz bo prikazal zadnjih 5 vrstic določene datoteke:

[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.

Poleg tega ima rep posebno možnost -f za sprotno spremljanje sprememb v datoteki (zlasti dnevniških datotek).

Naslednji ukaz vam bo omogočil spremljanje sprememb v navedeni datoteki:

[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.

Preberite celotno stran o navodilih za uporabo in navodila:

$ man tail

6. ukaz za razvrščanje

sort se uporablja za razvrščanje vrstic besedilne datoteke ali iz običajnega vnosa.

Spodaj je vsebina datoteke z imenom domains.list:

[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

Za razvrščanje vsebine datoteke lahko zaženete preprost ukaz za razvrščanje tako:

[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

Ukaz za razvrščanje lahko uporabite na več načinov, preglejte nekaj koristnih člankov o ukazu za razvrščanje, kot sledi:

  1. 14 koristnih primerov ukaza Linux za razvrščanje - 1. del
  2. 7 Zanimivih primerov ukazov za razvrščanje Linuxa - 2. del
  3. Kako poiskati in razvrstiti datoteke glede na datum in čas spremembe
  4. Kako razvrstiti izhod ukaza ls po datumu in uri zadnje spremembe

7. ukaz uniq

Ukaz uniq se uporablja za poročanje ali izpuščanje ponavljajočih se vrstic, filtrira vrstice iz standardnega vhoda in zapisuje rezultat v standardni izhod.

Po zagonu razvrščanja v vhodnem toku lahko ponavljajoče se vrstice odstranite z uniq, kot v spodnjem primeru.

Če želite navesti število ponovitev vrstice, uporabite možnost -c in med primerjanjem prezrite razlike v primeru, tako da vključite možnost -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 

Za nadaljnje informacije o uporabi in zastave preberite priročno stran uniq:

$ man uniq

8. ukaz fmt

Preprosto optimalno oblikovalnik besedila preoblikuje odstavke v določeno datoteko in rezultate natisne na standardni izhod.

Sledi vsebina, pridobljena iz datoteke domain-list.txt:

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

Če želite zgornjo vsebino preoblikovati v standardni seznam, zaženite naslednji ukaz s stikalom -w , ki določa največjo širino vrstice:

[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. ukaz pr

ukaz pr pretvori besedilne datoteke ali standardni vnos za tiskanje. Na primer v sistemih Debian lahko vse nameščene pakete navedete na naslednji način:

$ dpkg -l

Če želite seznam razvrstiti po straneh in stolpcih, pripravljenih za tiskanje, izdajte naslednji ukaz.

[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

.....

Tu uporabljene zastave so:

  1. --column določa število stolpcev, ustvarjenih v izhodu.
  2. -l določa dolžino strani (privzeto je 66 vrstic).

10. ukaz tr

To orodje prevede ali izbriše znake s standardnega vhoda in rezultate zapiše v standardni izhod.

Sintaksa za uporabo tr je naslednja:

$ tr options set1 set2

Oglejte si spodnje primere, v prvem ukazu set1 ([: upper:]) predstavlja primer vhodnih znakov (vsi z velikimi črkami).

Potem set2 ([: lower:]) predstavlja primer, v katerem bodo nastali znaki. V drugem primeru je enako in ubežno zaporedje \n pomeni izpis v novi vrstici:

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

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

11. več Command

ukaz more je uporaben filter za pregledovanje datotek, ustvarjen v bistvu za ogled certifikatov. Vsebino datoteke prikazuje v obliki strani, kot je format, kjer lahko uporabniki za ogled več informacij pritisnejo [Enter].

Uporabite ga lahko za ogled velikih datotek, tako:

[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. manj Command

manj je nasprotje več ukaza zgoraj, vendar ponuja dodatne funkcije in z velikimi datotekami je nekoliko hitrejši.

Uporabite ga na enak način kot več:

[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
:

Preberite, zakaj je ukaz "manj" hitrejši od ukaza "več" za učinkovito krmarjenje po datotekah v Linuxu.

Za zdaj je to vse, obvestite nas o vseh tu omenjenih uporabnih orodjih ukazne vrstice, ki v Linuxu delujejo kot besedilni filtri prek spodnjega odseka za komentarje.