12 hyödyllistä komentoa tekstin suodattamiseen tehokkaita tiedostotoimintoja varten Linuxissa
Tässä artikkelissa tarkastellaan useita komentorivityökaluja, jotka toimivat suodattimina Linuxissa. Suodatin on ohjelma, joka lukee vakiosyötteen, suorittaa sille toiminnon ja kirjoittaa tulokset vakiotulosteeseen.
Tästä syystä sitä voidaan käyttää tietojen käsittelyyn tehokkailla tavoilla, kuten tulosteiden uudelleenjärjestelyllä hyödyllisten raporttien luomiseksi, tiedostojen tekstin muokkaaminen ja monet muut järjestelmänhallintatehtävät.
Alla on joitain hyödyllisiä tiedosto- tai tekstisuodattimia Linuxissa.
1. Awk-komento
Awk on merkittävä kuvioiden skannaus- ja käsittelykieli, jota voidaan käyttää hyödyllisten suodattimien rakentamiseen Linuxissa. Voit aloittaa sen käytön lukemalla Awk-sarjan osat 1–13.
Lue myös awk-man-sivu saadaksesi lisätietoja ja käyttövaihtoehtoja:
man awk
2. Sed-komento
sed on tehokas stream-editori tekstin suodattamiseen ja muuntamiseen. Olemme jo kirjoittaneet kaksi hyödyllistä artikkelia sedistä, jotka voit käydä läpi täällä:
- Kuinka käyttää GNU "sed" -komentoa tiedostojen luomiseen, muokkaamiseen ja manipulointiin Linuxissa
- 15 hyödyllistä "sed"-komentovinkkiä ja temppuja päivittäisiin Linux-järjestelmän hallintatehtäviin
sed man -sivulla on lisätty ohjausvaihtoehtoja ja ohjeita:
man sed
3. Grep-, Egrep-, Fgrep-, Rgrep-komennot
Nämä suodattavat ulostulolinjat, jotka vastaavat tiettyä kuviota. Ne lukevat rivejä tiedostosta tai vakiosyötteestä ja tulostavat kaikki vastaavat rivit oletuksena vakiotulostukseen.
Huomaa: pääohjelma on grep, muunnelmat ovat yksinkertaisesti samat kuin käytettäessä tiettyjä grep-asetuksia alla (ja niitä käytetään edelleen taaksepäin yhteensopivuuden takaamiseksi):
egrep = grep -E
fgrep = grep -F
rgrep = grep -r
Alla on joitain grep-peruskomentoja:
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:
Voit lukea lisää siitä, mitä eroa on Grepin, Egrepin ja Fgrepin välillä Linuxissa?.
4. pään komento
head-komentoa käytetään näyttämään tiedoston ensimmäiset osat, ja se tulostaa oletuksena ensimmäiset 10 riviä. Voit käyttää -n
num -lippua määrittääksesi näytettävien rivien määrän:
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
Opi käyttämään head-komentoa häntä- ja cat-komentojen kanssa tehokkaan käytön Linuxissa.
5. häntäkomento
häntä tulostaa tiedoston viimeiset osat (oletuksena 10 riviä). Käytä -n
-numerokytkintä määrittääksesi näytettävien rivien määrän.
Alla oleva komento tulostaa määritetyn tiedoston viimeiset 5 riviä:
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.
Lisäksi tail-kohdassa on erityinen vaihtoehto -f
, jolla voi seurata tiedoston muutoksia reaaliajassa (etenkin lokitiedostot).
Seuraavan komennon avulla voit seurata määritetyn tiedoston muutoksia:
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.
Lue häntä-man-sivulta täydellinen luettelo käyttövaihtoehdoista ja ohjeista:
man tail
6. lajittele komento
lajittelu-toimintoa käytetään tekstitiedoston rivien lajitteluun tai vakiosyötteen perusteella.
Alla on domains.list-nimisen tiedoston sisältö:
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
Voit suorittaa yksinkertaisen lajittelukomennon lajitellaksesi tiedoston sisällön seuraavasti:
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
Voit käyttää sort-komentoa monin tavoin. Käy läpi joitakin hyödyllisiä lajittelukomentoa koskevia artikkeleita seuraavasti:
- 14 hyödyllistä esimerkkiä Linuxin lajittelukomennosta – Osa 1
- 7 mielenkiintoista Linuxin lajittelukomentoesimerkkiä – Osa 2
- Tiedostojen etsiminen ja lajittelu muokkauspäivämäärän ja -ajan perusteella
- Kuinka lajitella ls-komennon tulos viimeisimmän muokkauksen päivämäärän ja kellonajan mukaan
7. uniq Command
uniq-komentoa käytetään toistuvien rivien raportointiin tai jättämiseen pois, se suodattaa rivit vakiosyötteestä ja kirjoittaa tuloksen vakiotuloon.
Kun olet suorittanut lajittelun syöttövirran, voit poistaa toistuvat rivit uniq-komennolla alla olevan esimerkin mukaisesti.
Jos haluat ilmoittaa rivin esiintymisten määrän, käytä -c
-vaihtoehtoa ja jätä erot huomioimatta vertailussa sisällyttämällä -i
-vaihtoehto:
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
Lue ainutlaatuinen man-sivu saadaksesi lisätietoja käytöstä ja lipuista:
man uniq
8. fmt-komento
fmt yksinkertainen optimaalinen tekstinmuotoilija, se muotoilee kappaleet uudelleen määritetyssä tiedostossa ja tulostaa tulokset vakiotulostukseen.
Seuraava on tiedostosta domain-list.txt purettu sisältö:
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
Jos haluat muotoilla yllä olevan sisällön uudelleen vakiolistaksi, suorita seuraava komento -w
-kytkimellä, jota käytetään määrittämään rivin enimmäisleveys:
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 Komento
pr-komento muuntaa tekstitiedostot tai vakiosyötteen tulostusta varten. Esimerkiksi Debian-järjestelmissä voit listata kaikki asennetut paketit seuraavasti:
dpkg -l
Järjestä luettelo tulostettaviksi valmiiksi sivuiksi ja sarakkeiksi antamalla seuraava komento.
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
.....
Tässä käytetyt liput ovat:
--column
määrittää tulosteeseen luotujen sarakkeiden määrän.-l
määrittää sivun pituuden (oletus on 66 riviä).
10. tr Komento
Tämä työkalu kääntää tai poistaa merkkejä vakiosyötteestä ja kirjoittaa tulokset vakiotuloon.
tr:n syntaksi on seuraava:
tr options set1 set2
Katso alla olevia esimerkkejä. Ensimmäisessä komennossa set1( [:upper:] )
edustaa syötettävien merkkien tapausta (kaikki isot kirjaimet).
Sitten set2([:lower:])
edustaa tapausta, jossa tuloksena olevat merkit ovat. Se on sama asia toisessa esimerkissä ja estosekvenssi \n
tarkoittaa tulostusta uudelle riville:
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. lisää komento
More-komento on hyödyllinen tiedostojen käsittelysuodatin, joka on luotu pohjimmiltaan varmenteiden katseluun. Se näyttää tiedoston sisällön sivun kaltaisessa muodossa, jossa käyttäjät voivat tarkastella lisätietoja painamalla [Enter].
Voit käyttää sitä suurten tiedostojen katseluun, kuten esimerkiksi:
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. vähemmän komentoa
vähemmän on yllä olevan komennon enemmän vastakohta, mutta se tarjoaa lisäominaisuuksia ja on hieman nopeampi suurilla tiedostoilla.
Käytä sitä samalla tavalla kuin muutakin:
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
:
Opi miksi "vähemmän" on nopeampi kuin "enemmän" -komento tehokkaaseen tiedostonavigointiin Linuxissa.
Siinä kaikki toistaiseksi, ilmoita meille kaikista hyödyllisistä komentorivityökaluista, joita ei mainita tässä ja jotka toimivat tekstisuodattimina Linuxissa alla olevan kommenttiosion kautta.