12 nyttige kommandoer til filtrering af tekst til effektive filoperationer i Linux


I denne artikel gennemgår vi et antal kommandolinjeværktøjer, der fungerer som filtre i Linux. Et filter er et program, der læser standardinput, udfører en operation på det og skriver resultaterne til standardoutput.

Af denne grund kan den bruges til at behandle information på kraftige måder såsom omstrukturering af output for at generere nyttige rapporter, ændring af tekst i filer og mange andre systemadministrationsopgaver.

Med det sagt nedenfor er nogle af de nyttige fil- eller tekstfiltre i Linux.

1. Awk-kommando

Awk er et bemærkelsesværdigt mønsterscannings- og behandlingssprog, det kan bruges til at oprette nyttige filtre i Linux. Du kan begynde at bruge det ved at læse gennem vores Awk-serie del 1 til del 13.

Derudover skal du også læse igennem awk man-siden for at få mere info og brugsindstillinger:

$ man awk

2. Sed kommando

sed er en kraftfuld stream-editor til filtrering og transformation af tekst. Vi har allerede skrevet to nyttige artikler om sed, som du kan gennemgå det her:

  1. Sådan bruges GNU 'sed' Command til at oprette, redigere og manipulere filer i Linux
  2. 15 Nyttige 'sed' kommandotip og -tricks til daglige Linux-systemadministrationsopgaver

Sed man-siden har tilføjet kontrolmuligheder og instruktioner:

$ man sed

3. Kommandoer til Grep, Egrep, Fgrep, Rgrep

Disse filtre udgangslinjer, der matcher et givet mønster. De læser linjer fra en fil eller standardindgang og udskriver alle matchende linjer som standard til standardoutput.

Bemærk: Hovedprogrammet bruger specifikke grep-indstillinger som nedenfor (og de bruges stadig til bagudkompatibilitet):

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

Nedenfor er nogle grundlæggende grep-kommandoer:

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

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

Du kan læse mere om Hvad er forskellen mellem Grep, Egrep og Fgrep i Linux ?.

4. hovedkommando

head bruges til at vise de første dele af en fil, det outputter de første 10 linjer som standard. Du kan bruge -n num-flaget til at angive antallet af linjer, der skal vises:

[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

Lær, hvordan du bruger hovedkommando med hale- og kattekommandoer til effektiv brug i Linux.

5. hale kommando

tail udgange de sidste dele (10 linjer som standard) af en fil. Brug -n num-kontakten til at angive antallet af linjer, der skal vises.

Kommandoen nedenfor sender de sidste 5 linjer i den angivne fil:

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

Derudover har halen en særlig mulighed -f til at se ændringer i en fil i realtid (især logfiler).

Følgende kommando giver dig mulighed for at overvåge ændringer i den angivne fil:

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

Læs hele halen-siden for en komplet liste over anvendelsesmuligheder og instruktioner:

$ man tail

6. sorter kommando

sortering bruges til at sortere linjer i en tekstfil eller fra standardinput.

Nedenfor er indholdet af en fil med navnet 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

Du kan køre en simpel sorteringskommando for at sortere filindholdet således:

[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

Du kan bruge sorteringskommandoen på mange måder, gennemgå nogle af de nyttige artikler om sorteringskommandoen som følger:

  1. 14 Nyttige eksempler på Linux 'sort' kommando - del 1
  2. 7 Interessante Linux-sorterings kommandoeksempler - del 2
  3. Sådan finder du og sorterer filer baseret på dato og klokkeslæt for ændring
  4. Sådan sorteres output af 'ls' kommando efter sidste ændrede dato og klokkeslæt

7. uniq-kommando

Uniq-kommandoen bruges til at rapportere eller udelade gentagne linjer, den filtrerer linjer fra standardinput og skriver resultatet til standardoutput.

Efter at have kørt sortering på en inputstrøm, kan du fjerne gentagne linjer med uniq som i eksemplet nedenfor.

For at angive antallet af forekomster af en linje skal du bruge indstillingen -c og ignorere forskelle i tilfælde, mens du sammenligner ved at inkludere indstillingen -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 

Læs gennem uniq-mandsiden for yderligere oplysninger om brug og flag:

$ man uniq

8. fmt Kommando

fmt enkel optimal tekstformatering, den omformaterer afsnit i specificeret fil og udskriver resultater til standardoutput.

Følgende er indholdet ekstraheret fra filen domain-list.txt:

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

For at omformatere ovenstående indhold til en standardliste skal du køre følgende kommando med -w -knappen bruges til at definere den maksimale linjebredde:

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

kommandoen pr konverterer tekstfiler eller standardinput til udskrivning. For eksempel på Debian-systemer kan du liste alle installerede pakker som følger:

$ dpkg -l

Udgiv følgende kommando for at organisere listen i sider og kolonner, der er klar til udskrivning.

[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

.....

Flagene, der bruges her, er:

  1. - kolonne definerer antallet af kolonner, der er oprettet i output.
  2. -l angiver sidelængde (standard er 66 linjer).

10. tr Kommando

Dette værktøj oversætter eller sletter tegn fra standardinput og skriver resultater til standardoutput.

Syntaksen for brug af tr er som følger:

$ tr options set1 set2

Se eksemplerne nedenfor, i den første kommando repræsenterer set1 ([: upper:]) tilfældet med inputtegn (alle store bogstaver).

Derefter repræsenterer set2 ([: lower:]) det tilfælde, hvor de resulterende tegn vil være. Det er det samme i det andet eksempel og escape-sekvensen betyder udskrivning på en ny linje:

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

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

11. mere kommando

mere kommando er et nyttigt filperusal-filter oprettet grundlæggende til certifikatvisning. Det viser filindhold i en side som et format, hvor brugerne kan trykke på [Enter] for at se flere oplysninger.

Du kan bruge den til at se store filer som sådan:

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

mindre er det modsatte af mere kommando ovenfor, men det giver ekstra funktioner, og det er lidt hurtigere med store filer.

Brug det på samme måde som mere:

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

Lær hvorfor 'mindre' er hurtigere end 'mere' kommando til effektiv filnavigation i Linux.

Det er alt for nu, lad os vide om nyttige kommandolinjeværktøjer, der ikke er nævnt her, der fungerer som tekstfiltre i Linux via kommentarsektionen nedenfor.