12 ordres útils per filtrar text per a operacions efectives de fitxers a Linux


En aquest article, revisarem diverses eines de línia d'ordres que actuen com a filtres a Linux. Un filtre és un programa que llegeix l'entrada estàndard, realitza una operació sobre ella i escriu els resultats a la sortida estàndard.

Per aquest motiu, es pot utilitzar per processar informació de maneres potents, com ara la reestructuració de la sortida per generar informes útils, la modificació de text en fitxers i moltes altres tasques d'administració del sistema.

Dit això, a continuació es mostren alguns dels filtres de text o fitxers útils a Linux.

1. Comandament Awk

Awk és un llenguatge de processament i exploració de patrons notable, es pot utilitzar per crear filtres útils a Linux. Podeu començar a utilitzar-lo llegint la nostra sèrie Awk de la part 1 a la part 13.

A més, llegiu també la pàgina de manual awk per obtenir més informació i opcions d'ús:

$ man awk

2. Comandament Sed

sed és un potent editor de flux per filtrar i transformar text. Ja hem escrit dos articles útils sobre sed, que podeu consultar aquí:

  1. Com utilitzar l'ordre sed de GNU per crear, editar i manipular fitxers a Linux
  2. 15 consells i trucs útils d'ordres sed per a les tasques diàries d'administració del sistema Linux

La pàgina man de sed ha afegit opcions de control i instruccions:

$ man sed

3. Ordres Grep, Egrep, Fgrep, Rgrep

Aquests filtres produeixen línies que coincideixen amb un patró determinat. Llegeixen línies d'un fitxer o entrada estàndard i imprimeixen totes les línies coincidents per defecte a la sortida estàndard.

Nota: el programa principal utilitza opcions grep específiques com es mostra a continuació (i encara s'estan utilitzant per a la compatibilitat amb versions anteriors):

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

A continuació es mostren algunes ordres bàsiques de grep:

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

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

Podeu llegir més sobre Quina diferència hi ha entre Grep, Egrep i Fgrep a Linux?.

4. Cap de comandament

head s'utilitza per mostrar les primeres parts d'un fitxer, de manera predeterminada genera les primeres 10 línies. Podeu utilitzar el senyalador -n num per especificar el nombre de línies que es mostraran:

[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

Apreneu a utilitzar l'ordre head amb ordres tail i cat per a un ús efectiu a Linux.

5. Comandament de la cua

tail mostra les darreres parts (10 línies per defecte) d'un fitxer. Utilitzeu el commutador -n num per especificar el nombre de línies que es mostraran.

L'ordre següent mostrarà les 5 últimes línies del fitxer especificat:

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

A més, tail té una opció especial -f per veure els canvis en un fitxer en temps real (especialment fitxers de registre).

L'ordre següent us permetrà supervisar els canvis al fitxer especificat:

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

Llegiu la pàgina man de la cua per obtenir una llista completa d'opcions d'ús i instruccions:

$ man tail

6. Ordre ordenar

L'ordenació s'utilitza per ordenar les línies d'un fitxer de text o d'una entrada estàndard.

A continuació es mostra el contingut d'un fitxer anomenat 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

Podeu executar una ordre d'ordenació senzilla per ordenar el contingut del fitxer així:

[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

Podeu utilitzar l'ordre d'ordenació de moltes maneres, reviseu alguns dels articles útils sobre l'ordre d'ordenació de la següent manera:

  1. 14 exemples útils de l'ordre sort de Linux - Part 1
  2. 7 exemples interessants d'ordres ordenar de Linux - Part 2
  3. Com cercar i ordenar fitxers segons la data i l'hora de modificació
  4. Com ordenar la sortida de l'ordre 'ls' per data i hora de l'última modificació

7. Comandament uniq

L'ordre uniq s'utilitza per informar o ometre línies repetides, filtra les línies de l'entrada estàndard i escriu el resultat a la sortida estàndard.

Després d'executar l'ordenació en un flux d'entrada, podeu eliminar les línies repetides amb uniq com a l'exemple següent.

Per indicar el nombre d'ocurrències d'una línia, utilitzeu l'opció -c i ignoreu les diferències entre majúscules i minúscules mentre compareu incloent l'opció -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 

Llegiu la pàgina de manual d'uniq per obtenir més informació d'ús i marques:

$ man uniq

8. Comandament fmt

fmt simple formatador de text òptim, reformatea els paràgrafs en un fitxer especificat i imprimeix els resultats a la sortida estàndard.

El següent és el contingut extret del fitxer domain-list.txt:

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

Per reformatar el contingut anterior a una llista estàndard, executeu l'ordre següent amb l'interruptor -w que s'utilitza per definir l'amplada màxima de línia:

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

L'ordre pr converteix fitxers de text o entrada estàndard per a la impressió. Per exemple, als sistemes Debian, podeu llistar tots els paquets instal·lats de la següent manera:

$ dpkg -l

Per organitzar la llista en pàgines i columnes preparades per a la impressió, emeteu l'ordre següent.

[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

.....

Les banderes utilitzades aquí són:

  1. --column defineix el nombre de columnes creades a la sortida.
  2. -l especifica la longitud de la pàgina (el valor predeterminat és de 66 línies).

10. tr Comandament

Aquesta eina tradueix o elimina caràcters de l'entrada estàndard i escriu els resultats a la sortida estàndard.

La sintaxi per utilitzar tr és la següent:

$ tr options set1 set2

Mireu els exemples següents, a la primera ordre, set1([:upper:] ) representa la majúscules i minúscules dels caràcters d'entrada (tots en majúscules).

Aleshores set2([:lower:]) representa el cas en què es trobaran els caràcters resultants. És el mateix en el segon exemple i la seqüència d'escapada \n significa imprimir la sortida en una línia nova:

[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és Comandament

L'ordre more és un filtre de lectura de fitxers útil creat bàsicament per a la visualització de certificats. Mostra el contingut del fitxer en un format de pàgina, on els usuaris poden prémer [Enter] per veure més informació.

Podeu utilitzar-lo per visualitzar fitxers grans de la següent manera:

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

menys és el contrari de l'ordre més anterior, però ofereix funcions addicionals i és una mica més ràpid amb fitxers grans.

Utilitzeu-lo de la mateixa manera que més:

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

Esbrineu per què l'ordre menys és més ràpid que més per a una navegació eficaç de fitxers a Linux.

Això és tot per ara, feu-nos saber qualsevol eina de línia d'ordres útil no esmentada aquí, que actuï com a filtres de text a Linux a través de la secció de comentaris a continuació.