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:
- Sådan bruges GNU 'sed' Command til at oprette, redigere og manipulere filer i Linux
- 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:
- 14 Nyttige eksempler på Linux 'sort' kommando - del 1
- 7 Interessante Linux-sorterings kommandoeksempler - del 2
- Sådan finder du og sorterer filer baseret på dato og klokkeslæt for ændring
- 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:
-
- kolonne
definerer antallet af kolonner, der er oprettet i output. -
-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.