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:

  1. Wéi benotzt Dir GNU 'sed' Kommando fir Dateien op Linux z'erstellen, z'änneren an ze manipuléieren
  2. 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:

  1. 14 Nëtzlech Beispiller vu Linux 'Sort' Kommando - Deel 1
  2. 7 Interessant Linux 'Zort' Kommando Beispiller - Deel 2
  3. Wéi fannt Dir Dateien op Basis vun Ännerungsdatum an Zäit
  4. 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:

  1. --Column definéiert d'Zuel vun de Kolonnen, déi am Ausgang erstallt sinn.
  2. -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.