12 korisnih naredbi za filtriranje teksta za učinkovite operacije datoteka u Linuxu


U ovom ćemo članku pregledati niz alata naredbenog retka koji djeluju kao filtri u Linuxu. Filtar je program koji čita standardni unos, izvodi operaciju nad njim i zapisuje rezultate na standardni izlaz.

Iz tog razloga, može se koristiti za obradu informacija na moćne načine kao što je restrukturiranje izlaza za generiranje korisnih izvješća, modificiranje teksta u datotekama i mnoge druge zadatke administracije sustava.

Uz navedeno, u nastavku su neki od korisnih filtara datoteka ili teksta u Linuxu.

1. Awk naredba

Awk je izvanredan jezik za skeniranje uzoraka i obradu, može se koristiti za izradu korisnih filtara u Linuxu. Možete ga početi koristiti čitanjem naše Awk serije od 1. do 13. dijela.

Osim toga, također pročitajte awk stranicu priručnika za više informacija i mogućnosti korištenja:

man awk

2. Zapovjedništvo Sed

sed je moćan uređivač streama za filtriranje i transformaciju teksta. Već smo napisali dva korisna članka o sed-u, a možete ih pregledati ovdje:

  1. Kako koristiti GNU 'sed' naredbu za stvaranje, uređivanje i manipuliranje datotekama u Linuxu
  2. 15 korisnih savjeta i trikova za naredbu 'sed' za svakodnevne zadatke administracije Linux sustava

Sed man stranica ima dodane opcije kontrole i upute:

man sed

3. Naredbe Grep, Egrep, Fgrep, Rgrep

Ovi filtri izlaze linije koje odgovaraju danom uzorku. Oni čitaju retke iz datoteke ili standardnog ulaza i ispisuju sve odgovarajuće retke prema zadanim postavkama na standardni izlaz.

Napomena: glavni program je grep, varijacije su jednostavno iste kao korištenje specifičnih grep opcija kao u nastavku (i još uvijek se koriste za kompatibilnost sa prethodnim verzijama):

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

Ispod su neke osnovne grep naredbe:

tecmint@TecMint ~ $ grep "aaronkilik" /etc/passwd
aaronkilik:x:1001:1001::/home/aaronkilik:

tecmint@TecMint ~ $ cat /etc/passwd | grep "aronkilik"
aaronkilik:x:1001:1001::/home/aaronkilik:

Možete pročitati više o tome Koja je razlika između Grepa, Egrepa i Fgrepa u Linuxu?.

4. glava Zapovjedništvo

head se koristi za prikaz prvih dijelova datoteke, prema zadanim postavkama ispisuje prvih 10 redaka. Možete koristiti oznaku -n num da navedete broj redaka koji će se prikazati:

tecmint@TecMint ~ $ 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)

tecmint@TecMint ~ $ 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 kako koristiti naredbu head s naredbama tail i cat za učinkovito korištenje u Linuxu.

5. rep Naredba

tail ispisuje posljednje dijelove (10 redaka prema zadanim postavkama) datoteke. Koristite prekidač -n num da odredite broj redaka koji će se prikazati.

Naredba u nastavku ispisat će posljednjih 5 redaka navedene datoteke:

tecmint@TecMint ~ $ 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.

Dodatno, tail ima posebnu opciju -f za gledanje promjena u datoteci u stvarnom vremenu (osobito log datoteka).

Sljedeća naredba omogućit će vam praćenje promjena u navedenoj datoteci:

tecmint@TecMint ~ $ 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.

Pročitajte zadnju stranicu priručnika za potpuni popis opcija korištenja i uputa:

man tail

6. Naredba sortiranja

sort se koristi za sortiranje redaka tekstualne datoteke ili iz standardnog unosa.

Ispod je sadržaj datoteke pod nazivom domains.list:

tecmint@TecMint ~ $ 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

Možete pokrenuti jednostavnu naredbu sortiranja da sortirate sadržaj datoteke ovako:

tecmint@TecMint ~ $ 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

Naredbu sort možete koristiti na mnogo načina, prođite kroz neke od korisnih članaka o naredbi sortiranja kako slijedi:

  1. 14 korisnih primjera naredbe 'sort' u Linuxu – 1. dio
  2. 7 zanimljivih primjera naredbi 'sort' u Linuxu – 2. dio
  3. Kako pronaći i sortirati datoteke na temelju datuma i vremena izmjene
  4. Kako sortirati izlaz naredbe 'ls' prema datumu i vremenu zadnje izmjene

7. naredba uniq

Naredba uniq koristi se za izvješćivanje ili izostavljanje ponovljenih redaka, filtrira retke iz standardnog ulaza i zapisuje ishod na standardni izlaz.

Nakon pokretanja sort na ulaznom toku, možete ukloniti ponovljene retke pomoću uniq kao u donjem primjeru.

Kako biste označili broj pojavljivanja retka, koristite opciju -c i zanemarite razlike u velikim i malim slovima tijekom usporedbe uključivanjem opcije -i:

tecmint@TecMint ~ $ cat domains.list
linux-console.net
linux-console.net
news.linux-console.net
news.linux-console.net
linuxsay.com
linuxsay.com
windowsmint.com

tecmint@TecMint ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.linux-console.net
2 linux-console.net
1 windowsmint.com 

Pročitajte uniq stranicu priručnika za daljnje informacije o korištenju i oznake:

man uniq

8. Naredba fmt

fmt jednostavan optimalni alat za oblikovanje teksta, koji preoblikuje odlomke u određenoj datoteci i ispisuje rezultate na standardni izlaz.

Sljedeći je sadržaj izdvojen iz datoteke domain-list.txt:

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

Za preformatiranje gornjeg sadržaja u standardni popis, pokrenite sljedeću naredbu s prekidačem -w koji se koristi za definiranje maksimalne širine linije:

tecmint@TecMint ~ $ cat domain-list.txt 
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com

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

9. pr Naredba

Naredba pr pretvara tekstualne datoteke ili standardni unos za ispis. Na primjer, na Debian sustavima, možete popisati sve instalirane pakete na sljedeći način:

dpkg -l

Da biste organizirali popis u stranice i stupce spremne za ispis, izdajte sljedeću naredbu.

tecmint@TecMint ~ $ 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

.....

Zastave koje se ovdje koriste su:

  1. --column definira broj stupaca kreiranih u izlazu.
  2. -l određuje duljinu stranice (zadano je 66 redaka).

10. tr Naredba

Ovaj alat prevodi ili briše znakove iz standardnog unosa i zapisuje rezultate u standardni izlaz.

Sintaksa za korištenje tr je sljedeća:

tr options set1 set2

Pogledajte primjere u nastavku, u prvoj naredbi, set1( [:upper:] ) predstavlja slučaj unosa znakova (sva velika slova).

Tada set2([:lower:]) predstavlja veličinu u kojoj će biti rezultirajući znakovi. Ista je stvar u drugom primjeru i izlazna sekvenca \n znači ispis u novom redu:

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

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

11. više Zapovjedništvo

Naredba more koristan je filtar za pregledavanje datoteka stvoren prvenstveno za pregled certifikata. Prikazuje sadržaj datoteke u formatu poput stranice, gdje korisnici mogu pritisnuti [Enter] za pregled više informacija.

Možete ga koristiti za pregled velikih datoteka na sljedeći način:

tecmint@TecMint ~ $ 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 (buildd@lgw01-21) (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. manje Zapovjed

manje je suprotno od gornje naredbe više, ali nudi dodatne značajke i malo je brži s velikim datotekama.

Koristite ga na isti način kao i više:

tecmint@TecMint ~ $ 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 (buildd@lgw01-21) (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
:

Saznajte zašto je 'manje' brže od 'više' Naredba za učinkovitu navigaciju datotekama u Linuxu.

To je sve za sada, javite nam sve korisne alate naredbenog retka koji nisu ovdje spomenuti, a koji djeluju kao tekstualni filtri u Linuxu putem odjeljka za komentare u nastavku.