12 comandos útiles para filtrar texto para operaciones de archivo efectivas en Linux


En este artículo, revisaremos una serie de herramientas de línea de comandos que actúan como filtros en Linux. Un filtro es un programa que lee la entrada estándar, realiza una operación sobre ella y escribe los resultados en la salida estándar.

Por esta razón, se puede utilizar para procesar información de formas poderosas, como reestructurar la salida para generar informes útiles, modificar texto en archivos y muchas otras tareas de administración del sistema.

Dicho esto, a continuación se muestran algunos de los filtros de texto o archivos útiles en Linux.

1. Awk Command

Awk es un lenguaje de procesamiento y escaneo de patrones notable, se puede usar para crear filtros útiles en Linux. Puede comenzar a usarlo leyendo nuestra serie Awk, Parte 1 a Parte 13.

Además, lea también la página de manual de awk para obtener más información y opciones de uso:

$ man awk

2. Sed Command

sed es un potente editor de flujo para filtrar y transformar texto. Ya hemos escrito dos artículos útiles sobre sed, que puede leer aquí:

  1. Cómo usar el comando "sed" de GNU para crear, editar y manipular archivos en Linux
  2. 15 consejos y trucos útiles sobre el comando "sed" para las tareas diarias de administración del sistema Linux

La página de manual de sed ha agregado opciones de control e instrucciones:

$ man sed

3. Comandos Grep, Egrep, Fgrep, Rgrep

Estos filtros generan líneas que coinciden con un patrón determinado. Leen las líneas de un archivo o una entrada estándar e imprimen todas las líneas coincidentes de forma predeterminada en la salida estándar.

Nota: El programa principal está usando opciones grep específicas como se muestra a continuación (y todavía se están usando para compatibilidad con versiones anteriores):

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

A continuación se muestran algunos comandos grep básicos:

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

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

Puede leer más sobre ¿Cuál es la diferencia entre Grep, Egrep y Fgrep en Linux ?.

4. comando de cabeza

head se utiliza para mostrar las primeras partes de un archivo, genera las primeras 10 líneas de forma predeterminada. Puede utilizar el indicador numérico -n para especificar el número de líneas que se mostrarán:

[email protected] ~ $ 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 protected] ~ $ 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

Aprenda a usar el comando head con los comandos tail y cat para un uso efectivo en Linux.

5. comando de cola

tail genera las últimas partes (10 líneas por defecto) de un archivo. Utilice el conmutador numérico -n para especificar el número de líneas que se mostrarán.

El siguiente comando generará las últimas 5 líneas del archivo especificado:

[email protected] ~ $ 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.

Además, tail tiene una opción especial -f para ver los cambios en un archivo en tiempo real (especialmente los archivos de registro).

El siguiente comando le permitirá monitorear los cambios en el archivo especificado:

[email protected] ~ $ 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.

Lea la página del manual de tail para obtener una lista completa de las opciones de uso e instrucciones:

$ man tail

6. ordenar comando

sort se utiliza para ordenar líneas de un archivo de texto o de una entrada estándar.

A continuación se muestra el contenido de un archivo llamado domains.list:

[email protected] ~ $ cat domains.list
tecmint.com
tecmint.com
news.tecmint.com
news.tecmint.com
linuxsay.com
linuxsay.com
windowsmint.com
windowsmint.com

Puede ejecutar un comando de ordenación simple para ordenar el contenido del archivo de la siguiente manera:

[email protected] ~ $ sort domains.list
linuxsay.com
linuxsay.com
news.tecmint.com
news.tecmint.com
tecmint.com
tecmint.com
windowsmint.com
windowsmint.com

Puede usar el comando de clasificación de muchas maneras, revise algunos de los artículos útiles sobre el comando de clasificación de la siguiente manera:

  1. 14 ejemplos útiles del comando "sort" de Linux: parte 1
  2. 7 ejemplos interesantes de comandos de "ordenación" de Linux: parte 2
  3. Cómo buscar y ordenar archivos según la fecha y hora de modificación
  4. Cómo ordenar la salida del comando "ls" por fecha y hora de la última modificación

7. comando uniq

El comando uniq se utiliza para informar u omitir líneas repetidas, filtra las líneas de la entrada estándar y escribe el resultado en la salida estándar.

Después de ejecutar sort en un flujo de entrada, puede eliminar líneas repetidas con uniq como en el ejemplo siguiente.

Para indicar el número de ocurrencias de una línea, use la opción -c e ignore las diferencias en mayúsculas y minúsculas mientras compara incluyendo la opción -i :

[email protected] ~ $ cat domains.list
tecmint.com
tecmint.com
news.tecmint.com
news.tecmint.com
linuxsay.com
linuxsay.com
windowsmint.com

[email protected] ~ $ sort domains.list | uniq -c 
2 linuxsay.com
2 news.tecmint.com
2 tecmint.com
1 windowsmint.com 

Lea la página de manual de uniq para obtener más información de uso y banderas:

$ man uniq

8. Comando fmt

fmt formateador de texto óptimo simple, reformatea párrafos en un archivo especificado e imprime los resultados en la salida estándar.

El siguiente es el contenido extraído del archivo domain-list.txt:

1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com

Para reformatear el contenido anterior a una lista estándar, ejecute el siguiente comando con el interruptor -w que se usa para definir el ancho máximo de línea:

[email protected] ~ $ cat domain-list.txt 
1.tecmint.com 2.news.tecmint.com 3.linuxsay.com 4.windowsmint.com

[email protected] ~ $ fmt -w 1 domain-list.txt
1.tecmint.com 
2.news.tecmint.com 
3.linuxsay.com 
4.windowsmint.com

9. Comando pr

El comando pr convierte archivos de texto o entrada estándar para imprimir. Por ejemplo, en los sistemas Debian, puede enumerar todos los paquetes instalados de la siguiente manera:

$ dpkg -l

Para organizar la lista en páginas y columnas listas para imprimir, ejecute el siguiente comando.

[email protected] ~ $ 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

.....

Las banderas utilizadas aquí son:

  1. --column define el número de columnas creadas en la salida.
  2. -l especifica la longitud de la página (el valor predeterminado es 66 líneas).

10. tr Command

Esta herramienta traduce o elimina caracteres de la entrada estándar y escribe los resultados en la salida estándar.

La sintaxis para usar tr es la siguiente:

$ tr options set1 set2

Eche un vistazo a los ejemplos a continuación, en el primer comando, set1 ([: upper:]) representa el caso de los caracteres de entrada (todos en mayúsculas).

Entonces set2 ([: lower:]) representa el caso en el que serán los caracteres resultantes. Es lo mismo en el segundo ejemplo y la secuencia de escape significa imprimir la salida en una nueva línea:

[email protected] ~ $ echo "WWW.TECMINT.COM" | tr [:upper:] [:lower:]
www.tecmint.com

[email protected] ~ $ echo "news.tecmint.com" | tr [:lower:] [:upper:]
NEWS.TECMINT.COM

11. más Command

El comando more es un útil filtro de lectura de archivos creado básicamente para la visualización de certificados. Muestra el contenido del archivo en un formato similar a una página, donde los usuarios pueden presionar [Enter] para ver más información.

Puede usarlo para ver archivos grandes como este:

[email protected] ~ $ 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 protected]) (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. menos comando

less es lo opuesto al comando more anterior, pero ofrece funciones adicionales y es un poco más rápido con archivos grandes.

Úselo de la misma manera que más:

[email protected] ~ $ 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 protected]) (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
:

Descubra por qué "menos" es más rápido que el comando "más" para una navegación de archivos eficaz en Linux.

Eso es todo por ahora, háganos saber de cualquier herramienta útil de línea de comandos que no se mencione aquí, que actúe como filtros de texto en Linux a través de la sección de comentarios a continuación.