12 hyödyllistä komentoa tekstin suodattamiseksi tehokkaille tiedostotoiminnoille Linuxissa


Tässä artikkelissa tarkastelemme useita komentorivityökaluja, jotka toimivat suodattimina Linuxissa. Suodatin on ohjelma, joka lukee vakiotulon, suorittaa sen toiminnon ja kirjoittaa tulokset vakiolähtöön.

Tästä syystä sitä voidaan käyttää tietojen käsittelyyn tehokkailla tavoilla, kuten tuotoksen uudelleenjärjestely hyödyllisten raporttien luomiseksi, tiedostojen tekstin muokkaaminen ja monia muita järjestelmänhallintatehtäviä.

Tästä huolimatta alla on joitain hyödyllisiä tiedosto- tai tekstisuodattimia Linuxissa.

1. Awk-komento

Awk on merkittävä skannaus- ja käsittelykieli, jota voidaan käyttää hyödyllisten suodattimien rakentamiseen Linuxissa. Voit aloittaa sen käytön lukemalla Awk-sarjan osa 1 - osa 13.

Lisäksi lue myös awk man -sivulta lisätietoja ja käyttömahdollisuuksia:

$ man awk

2. Sed-komento

sed on tehokas virtaeditori tekstin suodattamiseen ja muuntamiseen. Olemme jo kirjoittaneet kaksi hyödyllistä artikkelia sedistä, jonka voit käydä läpi täällä:

  1. Kuinka GNU ‘sed’ -komentoa käytetään tiedostojen luomiseen, muokkaamiseen ja käsittelemiseen Linuxissa
  2. 15 hyödyllistä "sed" -komentovinkkiä päivittäisiin Linux-järjestelmänhallintatehtäviin

Sed-man -sivulla on lisätty ohjausasetuksia ja ohjeita:

$ man sed

3. Grep-, Egrep-, Fgrep- ja Rgrep-komennot

Nämä suodattavat lähtöviivat, jotka vastaavat tiettyä mallia. He lukevat riviä tiedostosta tai vakiotulosta ja tulostavat kaikki vastaavat rivit oletusarvoisesti vakiolähtöön.

Huomaa: Pääohjelma käyttää erityisiä grep-asetuksia kuten alla (ja niitä käytetään edelleen taaksepäin yhteensopivuuteen):

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

Alla on joitain peruskäskyjä:

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

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

Voit lukea lisää Grepin, Egrepin ja Fgrepin eroista Linuxissa ?.

4. pääkomento

head-tiedostoa käytetään tiedoston ensimmäisten osien näyttämiseen, se tuottaa oletusarvoisesti ensimmäiset 10 riviä. Voit määrittää -n num-lipun avulla määritettävien rivien määrän:

[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

Opi käyttämään pääkomentoa hännän ja kissan komentojen kanssa tehokkaaseen käyttöön Linuxissa.

5. hännän komento

tail tuottaa tiedoston viimeiset osat (oletuksena 10 riviä). Määritä näytettävien rivien määrä -n numer -kytkimellä.

Alla oleva komento antaa määritetyn tiedoston viimeiset 5 riviä:

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

Lisäksi taililla on erityinen vaihtoehto -f tiedostojen (erityisesti lokitiedostojen) reaaliaikaisten muutosten seuraamiseen.

Seuraava komento antaa sinun seurata määritetyn tiedoston muutoksia:

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

Lue tail man -sivulta täydellinen luettelo käyttövaihtoehdoista ja ohjeista:

$ man tail

6. lajittele komento

lajittelua käytetään tekstitiedoston rivien lajitteluun tai tavallisesta syötteestä.

Alla on domains.list-nimisen tiedoston sisältö:

[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

Voit lajitella tiedostosisällön yksinkertaisen lajittelukomennon avulla:

[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

Voit käyttää lajittelukomentoa monin tavoin, käydä läpi joitain hyödyllisiä artikkeleita lajittelukomennosta seuraavasti:

  1. 14 hyödyllistä esimerkkiä Linux-lajittelukomennosta - osa 1
  2. 7 mielenkiintoista Linux-lajittelukomentoesimerkkiä - osa 2
  3. Kuinka etsiä ja lajitella tiedostoja muokkauksen päivämäärän ja kellonajan perusteella
  4. Kuinka ls-komennon lajittelu viimeksi muokatun päivämäärän ja kellonajan mukaan

7. uniq-komento

uniq-komentoa käytetään toistuvien rivien ilmoittamiseen tai jättämiseen pois, se suodattaa rivit vakiotulosta ja kirjoittaa tuloksen vakiotulosteeseen.

Kun olet suorittanut lajittelun syötevirrassa, voit poistaa toistuvat rivit uniq: lla, kuten alla olevassa esimerkissä.

Jos haluat ilmoittaa rivin esiintymien määrän, käytä -c -vaihtoehtoa ja ohita erot siinä tapauksessa, että vertailet sisällyttämällä -i -vaihtoehdon:

[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 

Lue uniq-man -sivulta lisätietoja käyttötiedoista ja lipuista:

$ man uniq

8. fmt-komento

fmt yksinkertainen optimaalinen tekstin muotoilija, se muotoilee kappaleet uudelleen määritetyssä tiedostossa ja tulostaa tulokset vakiotulosteeseen.

Seuraava on sisältö, joka on purettu tiedostosta domain-list.txt:

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

Jos haluat alustaa yllä olevan sisällön uudelleen vakioluetteloon, suorita seuraava komento -w -kytkimellä, jolla määritetään rivin enimmäisleveys:

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

pr-komento muuntaa tekstitiedostot tai vakiotulostuksen tulostusta varten. Esimerkiksi Debian-järjestelmissä voit luetella kaikki asennetut paketit seuraavasti:

$ dpkg -l

Järjestä luettelo sivuille ja sarakkeisiin, jotka ovat valmiita tulostamaan, antamalla seuraava komento.

[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

.....

Tässä käytetyt liput ovat:

  1. --column määrittää tulosteessa luotujen sarakkeiden määrän.
  2. -l määrittää sivun pituuden (oletus on 66 riviä).

10. tr komento

Tämä työkalu kääntää tai poistaa merkkejä vakiosyötöstä ja kirjoittaa tulokset vakiotulosteeseen.

Tr: n käyttämisen syntaksi on seuraava:

$ tr options set1 set2

Katso alla olevien esimerkkien ensimmäisessä komennossa set1 ([: upper:]) edustaa syötemerkkien kirjainta (kaikki isot kirjaimet).

Tällöin set2 ([: lower:]) edustaa tapausta, jossa tuloksena olevat merkit ovat. Se on sama asia toisessa esimerkissä ja pakosarja \n tarkoittaa uuden rivin tulosteita:

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

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

11. lisää komento

lisää -komento on hyödyllinen tiedostojen tarkastussuodatin, joka on luotu periaatteessa varmenteiden katseluun. Se näyttää tiedostosisällön sivumaisessa muodossa, jossa käyttäjät voivat tarkastella lisätietoja painamalla [Enter].

Voit käyttää sitä suurten tiedostojen tarkasteluun, kuten:

[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ähemmän komentoa

vähemmän on päinvastainen kuin yllä oleva komento, mutta se tarjoaa lisäominaisuuksia ja on hieman nopeampi suurten tiedostojen kanssa.

Käytä sitä samalla tavalla kuin enemmän:

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

Opi miksi "vähemmän" on nopeampi kuin "enemmän" -komento tehokkaaseen tiedostojen navigointiin Linuxissa.

Tässä kaikki, kerro meille kaikista hyödyllisistä komentorivityökaluista, joita ei mainita tässä ja jotka toimivat tekstisuodattimina Linuxissa alla olevan kommenttiosan kautta.