Shell Script parte 2: Utilitários GNU e expressões regulares
A maioria dos comandos que utilizamos nos terminais “linux” são na verdade utilitários feitos pelo projeto GNU baseados em utilitários unix. Neste post farei uma listagem dos principais utilitários e uma breve explicação sobre o uso que eu já encontrei para cada um deles. Os utilitários que listei aqui não são complexos, mas são muito extensivos. Então o que mostrarei aqui é apenas a ponta do iceberg.
• sed (stream editor)
o sed é utilizado para modificar streams
de texto, suas principais funções são a de substituir ou deletar padrões em strings. Aqui estão algumas flags
do comando e algumas demonstrações do seu uso:
- Flags
-i
→ escreva no arquivo-e
→ escreva no stdout (terminal)
- modo de substituição
sed -i 's/PADRÃO/NOVO PADRÃO/' arquivo
- modo de deletar
sed -i '/PADRÂO/d' arquivo
- se utilizar mais de uma opção, sempre utilizar
\
no final do padrão:sed -i '/padrão1\|padrão2/d'
- deletar linhas vazias:
sed -i '/^&/d' arquivo
- aqui aparece um pouco de expressões regulares (regex) no caso o
^&
significa tudo que começa ou termina em … (nesse caso está vazio)
• awk
AWK na verdade é uma linguagem de script e programação que foi criada na mesma época que o C. Mas aqui vou abordar um uso muito superficial do comando.
Quando houver um arquivo de texto ou um output de algum comando com mais de uma coluna podemos fazer o seguinte:
awk '{print $1}' arquivo.txt #para printar a primeira coluna
awk '{print $2}' arquivo.txt #para printar a segunda coluna coluna
# etc...
também podemos usar condições, regex e um monte de coisas.
• grep
O grep retorna as linhas em que a string é mencionada
$ man wc | grep print
wc - print newline, word, and byte counts for each file
specified. A word is a non-zero-length sequence of printable characters...
The options below may be used to select which counts are printed, always in the following order:
print the byte counts
print the character counts
print the newline counts
print the maximum display width
print the word counts
• find
Nesse exemplo o find irá deletar os arquivos que existem a mais de 10 dias no diretório onde o comando foi executado
find . -mtime +10 -type f -delete
Algumas opções:
- ´-type f´ significa que estamos procurando um arquivo(f ile)
- ´-type d´ significa que estamos procurando um d iretório
• wc
o wc é utilizado para contagem:
wc -l
conta linhaswc -m
conta caractereswc -w
conta palavraswc -c
conta bytes
Expressões regulares são um “tipo de código” utilizado para buscar padrões, realizar validações e substituições.
Em regex, utilizamos os cochetes []
para especificar os caracteres que buscamos.
Caso busquemos [io]
, será feita uma busca pelos caracteres i
e o
em vez de io
(em sequência).
Para buscar datas por exemplo podemos utilizar [0-9]{2}/[0-9]{2}/[0-9]{4}
, que significa dd/mm/aaaa.
Para buscar um cpf seria bem parecido: [0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}
mais algumas coisas úteis:
[02] 0 ou 2
[2] 2
[2]{2} 22
$ fim da linha
^ começo da linha
Escrito por Vinícius Hansen