12 Nëtzlech Befehle fir Text ze filteren fir effektiv Dateioperatiounen am Linux
An dësem Artikel wäerte mir eng Zuel vu Kommandozeilen-Tools iwwerpréiwen, déi als Filteren am Linux handelen. E Filter ass e Programm deen Standardinput liest, eng Operatioun dorop ausféiert an d'Resultater op Standardoutput schreift.
Aus dësem Grond kann et benotzt ginn fir Informatioun op mächteg Manéier ze verarbeiten wéi d'Output ëmstrukturéieren fir nëtzlech Berichter ze generéieren, Text an Dateien z'änneren a vill aner Systemadministratiounsaufgaben.
Mat deem gesot, hei drënner sinn e puer vun den nëtzlechen Datei- oder Textfilteren am Linux.
1. Awk Kommando
Awk ass eng bemierkenswäert Muster Scannen a Veraarbechtungssprooch, et kann benotzt ginn fir nëtzlech Filteren am Linux ze bauen. Dir kënnt et ufänken ze benotzen andeems Dir eis Awk Serie Deel 1 bis Deel 13 liest.
Zousätzlech, liest och duerch d'awk Man Säit fir méi Informatioun a Benotzungsoptiounen:
$ man awk
2. Sed Kommando
sed ass e mächtege Stream Editor fir Text ze filteren an ze transforméieren. Mir hunn schonn zwee nëtzlech Artikelen iwwer sed geschriwwen, déi Dir hei duerchgoe kënnt:
- Wéi benotzt Dir GNU 'sed' Kommando fir Dateien op Linux z'erstellen, z'änneren an ze manipuléieren
- 15 Nëtzlech 'sed' Kommando Tipps an Tricks fir deeglech Linux System Administratioun Aufgaben
D'Sed Man Säit huet Kontrolloptiounen an Instruktioune bäigefüügt:
$ man sed
3. Grep, Egrep, Fgrep, Rgrep Kommandoen
Dës Filteren Ausgangslinne passen mat engem bestëmmte Muster. Si liesen Zeilen aus enger Datei oder Standardinput, a drécken all passende Linnen als Standard op Standardausgang.
Bemierkung: Den Haaptprogramm benotzt spezifesch grep Optiounen wéi hei ënnen (a si ginn nach ëmmer fir Réckkompatibilitéit benotzt):
$ egrep = grep -E $ fgrep = grep -F $ rgrep = grep -r
Drënner sinn e puer grondleeënd grep Kommandoen:
[email ~ $ grep "aaronkilik" /etc/passwd aaronkilik:x:1001:1001::/home/aaronkilik: [email ~ $ cat /etc/passwd | grep "aronkilik" aaronkilik:x:1001:1001::/home/aaronkilik:
Dir kënnt méi liesen iwwer Wat ass den Ënnerscheed tëscht Grep, Egrep a Fgrep a Linux?.
4. Kapp Kommando
head gëtt benotzt fir déi éischt Deeler vun enger Datei ze weisen, et gëtt als Standard déi éischt 10 Zeilen eraus. Dir kënnt den -n
num Fändel benotze fir d'Zuel vun den Zeilen ze spezifizéieren déi ugewise ginn:
[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éiert wéi Dir Kappbefehl mat Schwanz- a Kazbefehle benotzt fir effektiv Benotzung am Linux.
5. Schwäif Kommando
Schwänz erausginn déi lescht Deeler (10 Zeilen als Standard) vun enger Datei. Benotzt den -n
num Schalter fir d'Zuel vun den Zeilen ze spezifizéieren déi ugewise ginn.
De Kommando hei drënner wäert déi lescht 5 Zeilen vun der spezifizéierter Datei erausginn:
[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.
Zousätzlech huet Schwanz eng speziell Optioun -f
fir Ännerungen an engem Fichier an Echtzäit ze kucken (besonnesch Logdateien).
De folgende Kommando erlaabt Iech Ännerungen an der spezifizéierter Datei ze iwwerwaachen:
[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.
Liest duerch d'Schwanzman Säit fir eng komplett Lëscht vun Benotzungsoptiounen an Instruktiounen:
$ man tail
6. Zort Kommando
Zort gëtt benotzt fir Linnen vun enger Textdatei oder aus Standardinput ze sortéieren.
Drënner ass den Inhalt vun enger Datei mam Numm 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
Dir kënnt en einfachen Sortbefehl ausféieren fir de Dateiinhalt esou ze sortéieren:
[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
Dir kënnt Sort Kommando op vill Manéiere benotzen, gitt duerch e puer vun den nëtzlechen Artikelen op Sort Kommando wéi follegt:
- 14 Nëtzlech Beispiller vu Linux 'Sort' Kommando - Deel 1
- 7 Interessant Linux 'Zort' Kommando Beispiller - Deel 2
- Wéi fannt Dir Dateien op Basis vun Ännerungsdatum an Zäit
- Wéi sortéiert d'Output vum 'ls' Kommando no lescht geännerten Datum an Zäit
7. eenheetlech Kommando
uniq Kommando gëtt benotzt fir widderholl Zeilen ze berichten oder auszeginn, et filtert Linnen aus Standardinput a schreift d'Resultat op Standardoutput.
Nodeems Dir op engem Input Stream gefouert hutt, kënnt Dir widderholl Zeilen mat uniq ewechhuelen wéi am Beispill hei ënnen.
Fir d'Zuel vun den Optriede vun enger Zeil unzeginn, benotzt d'Optioun -c
an ignoréiert Differenzen am Fall beim Verglach andeems Dir d'Optioun -i
enthä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 [email ~ $ sort domains.list | uniq -c 2 linuxsay.com 2 news.linux-console.net 2 linux-console.net 1 windowsmint.com
Liest duerch d'Uniq Man Säit fir weider Benotzungsinformatiounen a Fändelen:
$ man uniq
8. fmt Kommando
fmt einfachen optimalen Textformater, et reforméiert Abschnitter a spezifizéierter Datei a dréckt d'Resultater op de Standardoutput.
Déi folgend ass den Inhalt extrahéiert aus der Datei Domain-list.txt:
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
Fir den uewe genannten Inhalt op eng Standardlëscht ze formatéieren, fuert de folgende Kommando mat -w
Schalter gëtt benotzt fir déi maximal Zeilbreed ze definéieren:
[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
pr Kommando konvertéiert Textdateien oder Standardinput fir Dréckerei. Zum Beispill op Debian Systemer kënnt Dir all installéiert Packagen wéi follegt oplëschten:
$ dpkg -l
Fir d'Lëscht op Säiten a Kolonnen ze organiséieren, prett fir ze drécken, gitt de folgende Kommando aus.
[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 .....
D'Fändelen déi hei benotzt ginn sinn:
--Column
definéiert d'Zuel vun de Kolonnen, déi am Ausgang erstallt sinn.-l
spezifizéiert Säitlängt (Standard ass 66 Zeilen).
10. tr Kommando
Dëst Tool iwwersetzt oder läscht Charaktere vum Standardinput a schreift Resultater op Standardoutput.
D'Syntax fir tr ze benotzen ass wéi follegt:
$ tr options set1 set2
Kuckt d'Beispiller hei drënner, am éischte Kommando, set1( [:upper:] )
stellt de Fall vun Input Zeechen (all grouss Buschtawen) duer.
Dann stellt set2([:lower:])
de Fall duer an deem déi entstinn Zeeche wäerte sinn. Et ass déiselwecht Saach am zweete Beispill an der Fluchsequenz
heescht Dréckenausgang op enger neier Linn:
[email ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:] linux-console.net [email ~ $ echo "news.linux-console.net" | tr [:lower:] [:upper:] NEWS.TECMINT.COM
11. méi Kommando
méi Kommando ass e nëtzlechen Datei-Perusal-Filter erstallt haaptsächlech fir d'Zertifikat kucken. Et weist Dateiinhalt an enger Säit wéi Format, wou d'Benotzer [Enter] drécke kënnen fir méi Informatioun ze gesinn.
Dir kënnt et benotze fir grouss Dateien ze gesinn wéi:
[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. manner Kommando
manner ass de Géigendeel vu méi Kommando uewen, awer et bitt extra Features an et ass e bësse méi séier mat grousse Dateien.
Benotzt et op déiselwecht Manéier wéi méi:
[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éiert Firwat 'manner' ass méi séier wéi 'méi' Kommando fir effektiv Dateinavigatioun am Linux.
Dat ass alles fir elo, loosst eis iwwer all nëtzlech Kommandozeil-Tools wëssen, déi net hei ernimmt sinn, déi als Textfilter am Linux iwwer d'Kommentarsektioun hei drënner handelen.