12 comandos útiles para filtrar texto para operaciones efectivas con archivos 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 maneras 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 archivos o texto útiles en Linux.
1. Comando Awk
Awk es un lenguaje de procesamiento y escaneo de patrones extraordinario que se puede utilizar 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. Comando sed
sed es un potente editor de secuencias para filtrar y transformar texto. Ya hemos escrito dos artículos útiles sobre sed, que puedes consultar aquí:
- Cómo utilizar el comando GNU 'sed' para crear, editar y manipular archivos en Linux
- 15 consejos y trucos útiles del 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 líneas de un archivo o entrada estándar e imprimen todas las líneas coincidentes de forma predeterminada en la salida estándar.
Nota: El programa principal es grep, las variaciones son simplemente las mismas que el uso de opciones de grep específicas como se muestra a continuación (y todavía se usan para compatibilidad con versiones anteriores):
egrep = grep -E
fgrep = grep -F
rgrep = grep -r
A continuación se muestran algunos comandos grep básicos:
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:
Puede leer más sobre ¿Cuál es la diferencia entre Grep, Egrep y Fgrep en Linux?
4. comando principal
head se utiliza para mostrar las primeras partes de un archivo; genera las primeras 10 líneas de forma predeterminada. Puede utilizar el indicador -n
num para especificar el número de líneas que se mostrarán:
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
Aprenda a utilizar el comando head con los comandos tail y cat para un uso eficaz en Linux.
5. comando de cola
tail genera las últimas partes (10 líneas por defecto) de un archivo. Utilice el interruptor 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:
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.
Además, tail tiene una opción especial -f
para observar los cambios en un archivo en tiempo real (especialmente archivos de registro).
El siguiente comando le permitirá monitorear los cambios en el archivo especificado:
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.
Lea la página de manual tail para obtener una lista completa de opciones e instrucciones de uso:
man tail
6. ordenar comando
sort se utiliza para ordenar líneas de un archivo de texto o de entrada estándar.
A continuación se muestra el contenido de un archivo llamado 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
Puede ejecutar un comando de clasificación simple para ordenar el contenido del archivo de esta manera:
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
Puede utilizar el comando sort de muchas maneras; lea algunos de los artículos útiles sobre el comando sort de la siguiente manera:
- 14 ejemplos útiles del comando 'sort' de Linux - Parte 1
- 7 interesantes ejemplos de comandos de “ordenación” de Linux – Parte 2
- Cómo buscar y ordenar archivos según la fecha y hora de modificación
- Cómo ordenar la salida del comando 'ls' por fecha y hora de la última modificación
7. comando único
El comando uniq se utiliza para informar u omitir líneas repetidas, filtra 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 siguiente ejemplo.
Para indicar el número de apariciones de una línea, utilice la opción -c
e ignore las diferencias entre mayúsculas y minúsculas al comparar incluyendo la opción -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
Lea la página de manual de uniq para obtener más información de uso e indicadores:
man uniq
8. comando fmt
fmt formateador de texto óptimo simple, reformatea los párrafos en un archivo específico e imprime los resultados en la salida estándar.
El siguiente es el contenido extraído del archivo domain-list.txt:
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
Para reformatear el contenido anterior a una lista estándar, ejecute el siguiente comando con el modificador -w
que se utiliza para definir el ancho máximo de línea:
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. comando pr
El comando pr convierte archivos de texto o entradas estándar para imprimir. Por ejemplo, en 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, emita el siguiente comando.
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
.....
Las banderas utilizadas aquí son:
--column
define el número de columnas creadas en la salida.-l
especifica la longitud de la página (el valor predeterminado es 66 líneas).
10. Comando tr
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 estarán los caracteres resultantes. Es lo mismo en el segundo ejemplo y la secuencia de escape \n
significa imprimir la salida en una nueva línea:
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. más comando
El comando más es un útil filtro de lectura de archivos creado básicamente para ver certificados. Muestra el contenido del archivo en un formato similar a una página, donde los usuarios pueden presionar [Entrar] para ver más información.
Puedes usarlo para ver archivos grandes como este:
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. menos comando
menos es lo opuesto al comando más anterior, pero ofrece funciones adicionales y es un poco más rápido con archivos grandes.
Úselo de la misma manera que más:
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
:
Descubra por qué "menos" es más rápido que el comando "más" para una navegación eficaz de archivos en Linux.
Eso es todo por ahora, infórmenos sobre cualquier herramienta útil de línea de comandos que no se mencione aquí y que actúe como filtro de texto en Linux a través de la sección de comentarios a continuación.