12 comenzi utile pentru filtrarea textului pentru operațiuni eficiente de fișiere în Linux


În acest articol, vom analiza o serie de instrumente de linie de comandă care acționează ca filtre în Linux. Un filtru este un program care citește intrarea standard, efectuează o operație asupra acestuia și scrie rezultatele în ieșirea standard.

Din acest motiv, poate fi folosit pentru a procesa informații în moduri puternice, cum ar fi restructurarea rezultatelor pentru a genera rapoarte utile, modificarea textului în fișiere și multe alte sarcini de administrare a sistemului.

Acestea fiind spuse, mai jos sunt câteva dintre filtrele utile de fișiere sau text din Linux.

1. Comanda Awk

Awk este un limbaj remarcabil de scanare și procesare a modelelor, care poate fi folosit pentru a construi filtre utile în Linux. Puteți începe să-l utilizați citind seria noastră Awk, partea 1 până la partea 13.

În plus, citiți și pagina de manual awk pentru mai multe informații și opțiuni de utilizare:

man awk

2. Comanda Sed

sed este un editor de flux puternic pentru filtrarea și transformarea textului. Am scris deja două articole utile despre sed, pe care le puteți parcurge aici:

  1. Cum să utilizați comanda GNU „sed” pentru a crea, edita și manipula fișiere în Linux
  2. 15 Sfaturi și trucuri utile pentru comenzile „sed” pentru sarcinile zilnice de administrare a sistemului Linux

Pagina de manual sed are opțiuni de control și instrucțiuni adăugate:

man sed

3. Comenzi Grep, Egrep, Fgrep, Rgrep

Aceste filtre ies liniile care corespund unui model dat. Ei citesc linii dintr-un fișier sau dintr-o intrare standard și imprimă toate liniile care se potrivesc în mod implicit la ieșirea standard.

Notă: programul principal este grep, variantele sunt pur și simplu aceleași cu utilizarea opțiunilor grep specifice de mai jos (și sunt încă folosite pentru compatibilitate cu versiunea anterioară):

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

Mai jos sunt câteva comenzi grep de bază:

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:

Puteți citi mai multe despre Care este diferența dintre Grep, Egrep și Fgrep în Linux?.

4. Comanda capului

head este folosit pentru a afișa primele părți ale unui fișier, scoate în mod implicit primele 10 linii. Puteți folosi indicatorul -n num pentru a specifica numărul de linii care vor fi afișate:

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

Aflați cum să utilizați comanda head cu comenzile tail și cat pentru o utilizare eficientă în Linux.

5. Coada Comanda

tail scoate ultimele părți (10 linii în mod implicit) ale unui fișier. Utilizați comutatorul -n num pentru a specifica numărul de linii care vor fi afișate.

Comanda de mai jos va afișa ultimele 5 linii ale fișierului specificat:

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.

În plus, tail are o opțiune specială -f pentru a urmări modificările dintr-un fișier în timp real (în special fișierele jurnal).

Următoarea comandă vă va permite să monitorizați modificările din fișierul specificat:

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.

Citiți pagina de manual tail pentru o listă completă de opțiuni de utilizare și instrucțiuni:

man tail

6. Comandă sortare

sortarea este folosită pentru a sorta linii dintr-un fișier text sau din intrarea standard.

Mai jos este conținutul unui fișier numit domains.list:

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

Puteți rula o comandă simplă de sortare pentru a sorta conținutul fișierului astfel:

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

Puteți folosi comanda sortare în mai multe moduri, parcurgeți câteva dintre articolele utile despre comanda sortare, după cum urmează:

  1. 14 exemple utile de comandă „sort” Linux – Partea 1
  2. 7 exemple interesante de comenzi pentru „sortare” Linux - Partea 2
  3. Cum să găsiți și să sortați fișierele în funcție de data și ora modificării
  4. Cum să sortați rezultatul comenzii „ls” după data și ora ultimei modificări

7. Comanda uniq

Comanda uniq este utilizată pentru a raporta sau a omite linii repetate, filtrează liniile de la intrarea standard și scrie rezultatul în ieșirea standard.

După ce rulați sortare pe un flux de intrare, puteți elimina liniile repetate cu uniq, ca în exemplul de mai jos.

Pentru a indica numărul de apariții ale unei linii, utilizați opțiunea -c și ignorați diferențele în caz de comparație, incluzând opțiunea -i:

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 

Citiți pagina de manual uniq pentru mai multe informații despre utilizare și semnalizări:

man uniq

8. Comanda fmt

fmt formatator de text simplu și optim, reformatează paragrafele din fișierul specificat și imprimă rezultatele la ieșirea standard.

Următorul este conținutul extras din fișierul domain-list.txt:

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

Pentru a reformata conținutul de mai sus într-o listă standard, rulați următoarea comandă cu comutatorul -w este folosit pentru a defini lățimea maximă a liniei:

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 Comanda

Comanda pr convertește fișierele text sau intrarea standard pentru imprimare. De exemplu, pe sistemele Debian, puteți enumera toate pachetele instalate după cum urmează:

dpkg -l

Pentru a organiza lista în pagini și coloane pregătite pentru imprimare, lansați următoarea comandă.

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

.....

Steagurile folosite aici sunt:

  1. --column definește numărul de coloane create în rezultat.
  2. -l specifică lungimea paginii (implicit este de 66 de linii).

10. tr Comanda

Acest instrument traduce sau șterge caractere din intrarea standard și scrie rezultatele în ieșirea standard.

Sintaxa pentru utilizarea tr este următoarea:

tr options set1 set2

Aruncați o privire la exemplele de mai jos, în prima comandă, set1([:upper:] ) reprezintă scrierea cu majuscule a caracterelor introduse (toate majuscule).

Apoi set2([:lower:]) reprezintă cazul în care vor fi caracterele rezultate. Este același lucru în cel de-al doilea exemplu, iar secvența de evadare \n înseamnă imprimare pe o linie nouă:

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. mai mult Comandă

Comanda more este un filtru util de examinare a fișierelor, creat în principal pentru vizualizarea certificatelor. Afișează conținutul fișierului într-un format asemănător paginii, unde utilizatorii pot apăsa pe [Enter] pentru a vedea mai multe informații.

Îl puteți folosi pentru a vizualiza fișiere mari astfel:

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. mai puțin Comanda

mai puțin este opusul comenzii mai mult de mai sus, dar oferă funcții suplimentare și este puțin mai rapid cu fișiere mari.

Folosiți-l în același mod ca mai multe:

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
:

Aflați de ce „mai puțin” este mai rapid decât „mai mult” Comanda pentru navigarea eficientă a fișierelor în Linux.

Asta e tot pentru moment, anunță-ne despre orice instrumente utile de linie de comandă care nu sunt menționate aici, care acționează ca filtre de text în Linux prin secțiunea de comentarii de mai jos.