Exibindo textos no Bash
Curso de Bash
Seção do curso de Bash sobre processamento de textos com cat, tac, nl, head, tail, less, sort e shuf.
Linux conta com vários comandos para processsamento de texto. Neste capítulo abordaremos como exibir textos integral e parcialmente e também como reorganizá-los.
Conteúdo
- Arquivos a serem utilizados nas seções abaixo
- Exibindo textos completos com cat
- Exibindo texto completo invertido com tac
- Exibindo texto completo e linhas numeradas com nl
- Exibindo o início do texto com head e o fim com tail
- Visualizando textos com less
- Ordenando linhas com sort
- Aleatorizando linhas com shuf
- Exercícios
Arquivos a serem utilizados nas seções abaixo
Criaremos alguns arquivos abaixo utilizando o comando printf e o operador de redirecionamento >. Ambos serão abordados em capítulos posteriores.
printf exibe na saída palavras formatadas de acordo com alguns símbolos próprios do comando.
> redireciona o texto, que seria exibido na saída do terminal, para um arquivo. Caso não exista, o arquivo à direita de > é criado já com o conteúdo redirecionado.
printf "\nA\nD\nC\nB\n" > letras
printf "1\n0\n4\n1\n0\n" > numeros
printf "%s\n" {A..Z} > alfabeto
printf "C\n23\nc\n2\nb\n03\nBA\n\`\n2\n" > desordemExibindo textos completos com cat
cat é a forma mais comum de exibir textos em Bash. O comando exibe na saída o texto integral dos arquivos informados como argumentos.
cat letras
A
D
C
B
Com dois ou mais argumentos, cat exibe o conteúdo dos arquivos na sequência especificada.
cat numeros letras1
0
4
1
0
A
D
C
B
⚠️ cat não é viável quando o arquivo a ser exibido contém milhares de linhas. Os comandos head, tail e less são alternativas mais interessantes.
Exibindo texto completo invertido com tac
tac exibe da última a primeira linha dos arquivos informados como argumentos.
tac letrasB
C
D
A
Com mais de um argumento, tac concatena os arquivos.
tac numeros letras0
1
4
0
1
B
C
D
A
Exibindo texto completo e linhas numeradas com nl
nl como cat exibe o conteúdo integral dos arquivos informados no argumento, na sequência em que eles aparecem.
Adicionalmente à cat, nl exibe números à frente de cada uma das linhas não-vazias.
nl numeros letras 1 1
2 0
3 4
4 1
5 0
6 A
7 D
8 C
9 B
A opção -s permite especificar um separador que sucede o número. O separador é envolvido entre ' ' para evitar que . seja intepretado como diretório atual e espaço como separador de palavras.
nl -s '. ' letras
1. A
2. D
3. C
4. B
-w muda a quantidade padrão (6) de colunas para os números.
nl -w 1 -s '. ' letras
1. A
2. D
3. C
4. B
-b a inclui linhas vazias na numeração.
nl -b a -w 1 -s '. ' letras1.
2. A
3. D
4. C
5. B
Exibindo o início do texto com head e o fim com tail
head exibe as 10 primeiras linhas do arquivo de texto...
head alfabetoA
B
C
D
E
F
G
H
I
J
... e tail as 10 últimas.
tail alfabetoQ
R
S
T
U
V
W
X
Y
Z
As opções -n ou -5 (Onde 5 pode ser substituído por qualquer número) de head e tail alteram a quantidade de linhas a serem exibidas.
A seguir, head exibe a primeira linha do arquivo alfabeto.
head -1 alfabetoAAqui tail exibe as 3 últimas linhas.
tail -n 3 alfabetoX
Y
Z
Ambos os comandos suportam dois ou mais argumentos. Um cabeçalho é exibido antes de cada arquivo se a opção -q não for informada.
tail -n 2 alfabeto numeros==> alfabeto <==
Y
Z
==> numeros <==
1
0
A opção -f de tail permite exibir o conteúdo de um arquivo de texto sendo continuamente atualizado. Opção especialmente útil para monitorar logs.
tail -f /var/log/syslogNov 16 22:27:48 FX505DV NetworkManager[794]: <info> [1605576468.3928] manager: rfkill: Wi-Fi now disabled by radio killswitch
Nov 16 22:27:53 FX505DV systemd[1]: systemd-rfkill.service: Succeeded.
Nov 16 22:27:58 FX505DV systemd[1]: NetworkManager-dispatcher.service: Succeeded.
Nov 16 22:27:58 FX505DV systemd-resolved[705]: Server returned error NXDOMAIN, mitigating potential DNS violation DVE-2018-0001, retrying transaction with reduced feature level UDP.
Pressione Ctrl + C para terminar.
Visualizando textos com less
less é um paginador e visualizador de arquivos. Útil para exibir arquivos de texto grandes, especialmente para pesquisa de palavras nesses textos.
Ao executar less, o paginador toma conta do terminal de forma que o prompt fica indisponível. O nome do arquivo aparece na última linha.
less alfabetoA
B
C
D
alfabeto
Ao pressionarmos qualquer tecla : aparece na última linha. Qualquer comando de less que digitarmos ou qualquer status será exibido nessa última linha.
As teclas ↑ e ↓ rolam uma linha acima ou abaixo. PgUp e PgDn/espaço uma página acima ou abaixo. Home e End para o ínicio ou fim do arquivo.
Abaixo, espaço foi pressionado uma vez.
E
F
G
H
:
Ao atingir o final do arquivo, less exibe (END) ao invés dos :.
W
X
Y
Z
(END)
Para buscar um termo, digite / mais a palavra a ser buscada e pressione Enter. O termo digitado aparecerá na última linha. A busca é case sensitive (sensível à capitalização).
W
X
Y
Z
/W
less então procura a palavra do ponto atual em diante. Ao encontrar a palavra less destaca a palavra. Caso não encontrada, less exibe na última linha Pattern not found (press RETURN).
W
X
Y
Z
(END)
Para buscar por outra correspondência da palavra pesquisada abaixo do ponto atual pressione a tecla n e Shift + n para pesquisar acima.
? pode substituir / caso queira pesquisar do ponto atual para cima. Ao contrário do comportamento com \, n busca a próxima ocorrência acima do ponto atual e Shift + n abaixo.
W
X
Y
Z
?B
B
C
D
E
:
Para sair de less digite q.
less permite que mais de um arquivo seja informado como argumento. A última linha de less então exibe o nome do arquivo atual seguido da quantidade de arquivos.
less alfabeto numerosPara abrir o próximo arquivo digite :n e para o arquivo anterior :p.
A
B
C
D
alfabeto (file 1 of 2)
A opção -N exibe número de linha antes de cada uma das linhas e insere uma tabulação antes do número.
less -N alfabeto 1 A
2 B
3 C
4 D
alfabeto
Similarmente à tail -f, less provê a opção +F com a mesma função de exibir continuamente as inserções sendo feitas em um arquivo.
less +F -N /var/log/syslog 16221 Nov 16 22:33:19 FX505DV systemd[1]: Started Run anacron jobs.
16222 Nov 16 22:33:19 FX505DV anacron[50243]: Anacron 2.3 started on 2020-11-16
16223 Nov 16 22:33:19 FX505DV anacron[50243]: Normal exit (0 jobs run)
16224 Nov 16 22:33:19 FX505DV systemd[1]: anacron.service: Succeeded.
Waiting for data... (interrupt to abort)
Pressione Ctrl + C para interromper a leitura do arquivo e q para sair de less.
Ordenando linhas com sort
sort exibe na saída linhas de texto ordenadas.
Utilizaremos o seguinte arquivo desordenado nos próximos exemplos.
cat desordemC
23
c
2
b
03
BA
`
2
A ordem padrão de sort é similar à do dicionário:
- caracteres especiais (como acentos) aparecem antes dos números;
- números aparecem antes de letras;
- letras minúsculas aparecem antes das maiúsculas;
- palavras que iniciam com o mesmo caractere terão o segundo caractere comparado, caso uma dessas palavras não contenha segundo caractere então ela aparecerá primeiro;
- a ordem final variará de acordo com a linguagem definida no SO.
Note que 03 aparece antes de 2 já que 0 antecede 2. E 2 antecede 23 dado o 3 "a mais" de 23.
sort desordem`
03
2
2
23
b
BA
c
C
A opção -n orderna os números por último levando em conta seu valor total e não os caracteres que os compõem. Abaixo é possível observar 03 antes de 23.
sort -n desordem`
b
BA
c
C
2
2
03
23
A ordem reversa pode ser definida com a opção -r.
sort -r alfanumericoC
c
BA
b
23
2
2
03
`
Utilize a opção -c para verificar se o arquivo está ordenado sem exibir seu conteúdo. Se o arquivo estiver ordenado não haverá saída, como abaixo.
sort -c alfabetoCaso desordenado, sort exibe o nome do arquivo + : + o número da linha em que a primeira palavra fora de ordem aparece. Depois especifica essa palavra após disorder: .
sort -c letrasNo caso abaixo C na linha 4 do arquivo letras é a primeira linha fora de ordem.
sort: letras:4: disorder: CA opção -u exibe apenas as linhas únicas.
sort -u numeros0
1
4
Com dois ou mais argumentos, sort concatena os arquivos e então ordena todas as linhas combinadas.
sort numeros letras
0
0
1
1
4
A
B
C
D
Sem argumentos ou com - como argumento, sort lê a entrada padrão. Para terminar a entrada de dados pressione Ctrl + D. Os caracteres então serão ordenados e exibidos na saída.
sort -⚠️ O símbolo > foi adicionado para indicar que os números foram digitados. Não digite o símbolo.
> 9
> 7
> 6
> 8
6
7
8
9
Aleatorizando linhas com shuf
shuf troca a ordem das linhas de textos aleatoriamente. Dá suporte à apenas um arquivo como argumento.
shuf alfabetoW
D
M
O
S
P
L
R
[...restante da saída omitido]
A opçao -n limita a quantidade de linhas na saída.
shuf -n 2 alfabetoC
Q
A opção -e permite que cada argumento seja tratado como uma linha ao invés de ler um arquivo.
shuf -e 0 1 2 3 41
3
2
4
0
A opção -i gera uma sequência aleatória ao invés de ler um arquivo. A sequência é especificada no argumento com o formato <núm_mínimo>-<núm_máximo>.
shuf -i 7-1312
8
7
9
11
13
10
Com - como argumento ou sem argumentos shuf lê a entrada padrão. Ctrl + D termina a entrada de dados.
shuf -⚠️ O símbolo > foi adicionado para indicar que os números foram digitados. Não digite o símbolo.
> 0
> 1
> 2
> 3
3
2
0
1
Exercícios
Selecione as afirmações verdadeiras
Arquivo a.
A
B
D
Arquivo b.
G
C
F