12 comandos úteis para filtrar texto para operações eficazes de arquivos no Linux
Neste artigo, revisaremos uma série de ferramentas de linha de comando que atuam como filtros no Linux. Um filtro é um programa que lê a entrada padrão, executa uma operação sobre ela e grava os resultados na saída padrão.
Por esta razão, pode ser usado para processar informações de maneiras poderosas, como reestruturar a saída para gerar relatórios úteis, modificar texto em arquivos e muitas outras tarefas de administração do sistema.
Com isso dito, abaixo estão alguns dos filtros úteis de arquivo ou texto no Linux.
1. Comando Awk
Awk é uma notável linguagem de varredura e processamento de padrões, que pode ser usada para construir filtros úteis no Linux. Você pode começar a usá-lo lendo nossa série Awk, Parte 1 a Parte 13.
Além disso, leia também a página de manual do awk para obter mais informações e opções de uso:
man awk
2. Comando Sed
sed é um poderoso editor de stream para filtrar e transformar texto. Já escrevemos dois artigos úteis sobre sed, que você pode ler aqui:
- Como usar o comando GNU ‘sed’ para criar, editar e manipular arquivos no Linux
- 15 dicas e truques úteis de comando ‘sed’ para tarefas diárias de administração do sistema Linux
A página man do sed adicionou opções e instruções de controle:
man sed
3. Comandos Grep, Egrep, Fgrep, Rgrep
Esses filtros geram linhas que correspondem a um determinado padrão. Eles leem linhas de um arquivo ou entrada padrão e imprimem todas as linhas correspondentes por padrão na saída padrão.
Nota: O programa principal é grep, as variações são simplesmente as mesmas do uso de opções grep específicas abaixo (e ainda estão sendo usadas para compatibilidade com versões anteriores):
egrep = grep -E
fgrep = grep -F
rgrep = grep -r
Abaixo estão alguns comandos básicos do grep:
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:
Você pode ler mais sobre Qual é a diferença entre Grep, Egrep e Fgrep no Linux?.
4. comando principal
head é usado para exibir as primeiras partes de um arquivo, ele gera as primeiras 10 linhas por padrão. Você pode usar o sinalizador -n
num para especificar o número de linhas a serem exibidas:
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 como usar o comando head com os comandos tail e cat para uso eficaz no Linux.
5. Comando cauda
tail exibe as últimas partes (10 linhas por padrão) de um arquivo. Use a opção -n
num para especificar o número de linhas a serem exibidas.
O comando abaixo irá gerar as últimas 5 linhas do arquivo 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.
Além disso, tail possui uma opção especial -f
para observar alterações em um arquivo em tempo real (especialmente arquivos de log).
O comando a seguir permitirá monitorar alterações no arquivo 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.
Leia a página de manual tail para obter uma lista completa de opções e instruções de uso:
man tail
6. comando de classificação
classificar é usado para classificar linhas de um arquivo de texto ou de entrada padrão.
Abaixo está o conteúdo de um arquivo chamado 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
Você pode executar um comando de classificação simples para classificar o conteúdo do arquivo da seguinte forma:
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
Você pode usar o comando sort de várias maneiras. Leia alguns dos artigos úteis sobre o comando sort da seguinte forma:
- 14 exemplos úteis de comando ‘sort’ do Linux – Parte 1
- 7 exemplos interessantes de comandos ‘sort’ do Linux – Parte 2
- Como encontrar e classificar arquivos com base na data e hora da modificação
- Como classificar a saída do comando ‘ls’ pela data e hora da última modificação
7. Comando uniq
O comando uniq é usado para relatar ou omitir linhas repetidas, ele filtra as linhas da entrada padrão e grava o resultado na saída padrão.
Depois de executar sort em um fluxo de entrada, você pode remover linhas repetidas com uniq como no exemplo abaixo.
Para indicar o número de ocorrências de uma linha, use a opção -c
e ignore as diferenças de maiúsculas e minúsculas durante a comparação, incluindo a opção -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
Leia a página de manual do uniq para obter mais informações e sinalizações de uso:
man uniq
8. Comando fmt
fmt formatador de texto simples e ideal, ele reformata parágrafos em um arquivo especificado e imprime os resultados na saída padrão.
A seguir está o conteúdo extraído do arquivo domain-list.txt:
1.linux-console.net 2.news.linux-console.net 3.linuxsay.com 4.windowsmint.com
Para reformatar o conteúdo acima para uma lista padrão, execute o seguinte comando com a opção -w
usada para definir a largura máxima da linha:
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 Comando
O comando pr converte arquivos de texto ou entrada padrão para impressão. Por exemplo, em sistemas Debian, você pode listar todos os pacotes instalados da seguinte forma:
dpkg -l
Para organizar a lista em páginas e colunas prontas para impressão, emita o seguinte 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
.....
Os sinalizadores usados aqui são:
--column
define o número de colunas criadas na saída.-l
especifica o comprimento da página (o padrão é 66 linhas).
10. Comando tr
Esta ferramenta traduz ou exclui caracteres da entrada padrão e grava os resultados na saída padrão.
A sintaxe para usar tr é a seguinte:
tr options set1 set2
Dê uma olhada nos exemplos abaixo, no primeiro comando, set1( [:upper:] )
representa o caso dos caracteres de entrada (todos maiúsculos).
Então set2([:lower:])
representa o caso em que estarão os caracteres resultantes. É a mesma coisa no segundo exemplo e a sequência de escape \n
significa imprimir a saída em uma nova linha:
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. mais Comando
O comando mais é um filtro útil de leitura de arquivos criado basicamente para visualização de certificados. Ele mostra o conteúdo do arquivo em formato de página, onde os usuários podem pressionar [Enter] para visualizar mais informações.
Você pode usá-lo para visualizar arquivos 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 é o oposto do comando mais acima, mas oferece recursos extras e é um pouco mais rápido com arquivos grandes.
Use-o da mesma forma que mais:
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
:
Aprenda por que o comando ‘menos’ é mais rápido que ‘mais’ para uma navegação eficaz de arquivos no Linux.
Por enquanto é tudo, informe-nos sobre quaisquer ferramentas úteis de linha de comando não mencionadas aqui, que atuam como filtros de texto no Linux por meio da seção de comentários abaixo.