semanickz
Linux shell script REGEX e File Globbing
---
Linux shell script REGEX e File Globbing
---
Alguns comandos para usar no linux:
cd
cd ~
cd ..
cd ../../
cd -
cd ~/Documentos/
cd ~/Vídeos/Legendas/Niver-Legendas/
pwd
clear
ls
ls -ltr
ls -ltC
ls -1
ps
ps axu
ps axu | more
touch nome-do-arquivo-a-ser-criado
touch arquivo-existente-atualiza-o-horário
man touch
echo palavra-a-ser-ecoada
echo 'palavra a ser ecoada'
echo -e '\nAcima \n\tNo meio \nAbaixo\n'
echo -e "\ncoluna1\tcoluna2\tcoluna3\t\n"
man echo
mkdir nome-do-diretório
mkdir -p nome-do-diretório/nome-do-sub-diretório/
rm -f nome-do-arquivo
rm -r nome-do-diretório
cp nome-do-arquivo-original nome-da-cópia-do-arquivo-original
cp -r nome-do-diretório-original nome-da-cópia-do-diretório-original
mv nome-do-arquivo-original novo-nome-para-o-arquivo
sleep 10
cat nome-do-arquivo
cat -b nome-do-arquivo
cat -A nome-do-arquivo
tac nome-do-arquivo
tail nome-do-arquivo
tail -n3 nome-do-arquivo
head nome-do-arquivo
head -n4 nome-do-arquivo
head -c8 nome-do-arquivo
wc nome-do-arquivo
wc -l nome-do-arquivo
wc -c nome-do-arquivo
wc -m nome-do-arquivo
wc nome-do-arquivo*
tail -n5 nome-do-arquivo | wc -w
sort nome-do-arquivo
sort -r nome-do-arquivo
sort -k2 nome-do-arquivo
tail /etc/passwd
tail /etc/passwd | sort -k3 -t ":" -g
uniq nome-do-arquivo
sort nome-do-arquivo | uniq
sort nome-do-arquivo | uniq -u
sort nome-do-arquivo | uniq -d
sort nome-do-arquivo | uniq -c
sort nome-do-arquivo | uniq -c | sort
sort nome-do-arquivo | uniq -c | sort -r
sort nome-do-arquivo | uniq -c | sort -r | head -n1
---
Funcionamento do Linux:
hardware > kernel > shell > usuário
---
O shell interpreta o script.
---
O shell padrão no linux é o bash. Ele é melhoria do shell sh e incorpora csh e ksh.
O shell csh traz recursos da linguagem C é diferente e faz coisas que os outros não fazem.
---
echo $0
echo $SHELL
tail /etc/passwd
---
Uso de aspas:
caracteres especiais.
* / $ ``
---
OBS:
As crases `` fazem um sub-comando dentro do shell.
---
OBS:
Aspas protegem
---
echo *
echo "*"
aspas duplas protegem o caractere.
Pode usar apóstrofos (aspas simples) para proteger.
echo '*'
---
OBS:
Aspas simples se comportam diferente de aspas duplas.
---
A barra invertida protegeo caractere seguinte. O shell não interpreta o caractere.
echo \*
ls "aluno*"
ls 'aluno*'
ls aluno\*
---
Aspas duplas não protegem cifrão, crase e a barra normal:
$ ` /
---
Quando temos variável cifrão $ ele estará buscando uma variável.
---
Aspas simples (apóstrofo) protegem tudo. 3 Exemplos para conferir:
1) echo $SHELL
2) echo "$SHELL"
3) echo 'SHELL'
---
Todos tem utilidade depende do caso. As aspas duplas são mais usadas.
---
Exemplo de barra invertida:
echo '5espaços 5espaços 5espaços'
echo 5espaços\ \ \ \ \ \5espaços 5espaços
---
Abro o editor de texto Gedit ou nano.
---
Expressões regulares:
File Globbing é diferente de Regex.
File Globbing: Forma do bash de selecionar arquivos de diretórios. Usa carcteres especiais para selecionar arquivos de diretórios.
---
Exemplo de File Globbing:
touch Aula1.txt Aula2.txt Aula3.txt Aula4.txt Aula5.txt aula6.txt
---
OBS:
Note que todos os arquivos começam com maiúsculas menos aula6.txt
---
ls Aula*
ls Aula2*
ls -la Aula[1234]*
ls -la Aula[1-5]*
ls -la Aula[1-6]*
ls -la [Aa]ula[1-6]*
ls -la [Aa]ula[156]*
ls -la *[12]*
ls {Aula,aula}[16]*
ls {Aula,aula}[16].txt
ls -l *5*
ls -l *5.txt
ls -l {Aula,aula}4*
ls -l {Aula,aula}4.txt
---
OBS File Globbing:
Os colchetes [] fazem listas e as chaves {} escolho as strings que me interessam.
---
Mais exemplos File Globbing:
ls -la Aula2*
ls -la Aula2?
ls -la Aula2????
---
File Globbing funciona com quase todos os comandos GNU/Linux.
---
Regex: Expressão regular. Usa caracteres para selecionar um padrão de texto. É para seleção de texto. Trabalha com o que está escrito no arquivo. Não trabalha com o arquivo. O que está escrito num arquivo geralmente é código. Regex é para trabalhar com código. Pode usar Regex para alterar o código. Trabalhar com código é muitas vezes alterar o código e a imensa força do Regex parece que é isto.
---
Usando o Regex:
---
Exemplos comando:
--
echo -e '\nEste texto vai para Aula1.txt.\n\nEle contém algumas palavras:\n\nCada, Cardo, Arame, Arca, Bote, boca, vira, Voa, Dura, dedo, Elfo, eifel, fardo, Fargo, guia, Guria, hostel, Hostil, Juno, jim, Inca, indo, Karma, kraken, Lele, lili, Mosca, mouse\num sistema Linux\nO mundo linux é Linux\nPraticando em distro Linux ou linux\n \nPara onde tem Linux.\nO [Linux] funciona em [Distros] linux. \nPoucos usam Linux \nMuitos usam Linux\nNunca \n \n# Um comentário \n \nnever\nOpera \nopus \nbaiog \nbeirag \nbicag \nquerer \nQueijo \nLeva \nArma \narmadura \nLinux \nlinux \nLinuxDistro \nHostel \nhostel \nLinux \nlinux \nSistema operacional Linux \nGNU \ngnu \nGNULinux \ngnulinux \nSomak \nSomek \nSomik \nsomak \nsomek \nsomik \nSoma \nSome \nSomi \nsoma \nsome \nsomi \npag \npeg \npig \npog \npug \n' > Aula1.txt
---
Comandos para imprimir o texto no terminal:
cat Aula1.txt
tac Aula1* | head
cat Aula1*
---
Usar grep ou egrep ou grep -e.
---
Para aparecer colorido criam um alias para o egrep pode ser em ~/.bashrc (muitos .bashrc já vem com esta opção):
#
alias egrep='egrep --color=auto'
#
---
OBS:
Abro o terminal onde está o arquivo Aula1.txt e executo:
egrep "[Hh]ostel" Aula1.txt
---
Resultado do comando acima:
$ egrep "[Hh]ostel" Aula1.txt
Cada, Cardo, Arame, Arca, Bote, boca, vira, Voa, Dura, dedo, Elfo, eifel, fardo, Fargo, guia, Guria, hostel, Hostil, Juno, jim, Inca, indo, Karma, kraken, Lele, lili, Mosca, mouse
Hostel
hostel
---
Executo os REGEX abaixo:
egrep [Gg]NULinux Aula1*
egrep [GgNnUu][Ll]inux Aula1*
---
Resultados da execução do REGEX:
$ egrep [Gg]NULinux Aula1*
GNULinux
$ egrep [GgNnUu][Ll]inux Aula1*
GNULinux
gnulinux
---
Executo o REGEX "b[a]*" com File Globbing (Aula1*):
egrep "b[a]*" Aula1*
---
O REGEX trabalha com o texto ou com as strings que estão escritas dentro de um arquivo. O File Globbing trabalha por fora do arquivo ou diretório, ajudando a localizar. Por exemplo Aula1*.
---
Comando REGEX:
egrep "b[a-i]*" Aula1*
---
Resultado:
$ egrep "b[a-i]*" Aula1*
Cada, Cardo, Arame, Arca, Bote, boca, vira, Voa, Dura, dedo, Elfo, eifel, fardo, Fargo, guia, Guria, hostel, Hostil, Juno, jim, Inca, indo, Karma, kraken, Lele, lili, Mosca, mouse
baiog
beirag
bicag
---
Comando REGEX:
egrep "^Linux" Aula1.txt
---
Resultado do comando REGEX:
$ egrep "^Linux" Aula1.txt
Linux
LinuxDistro
Linux
---
Comando REGEX:
egrep -v "^[Ll]inux" Aula1.txt
---
Resultado do comando REGEX:
$ egrep -v "^[Ll]inux" Aula1.txt
Este texto vai para Aula1.txt.
Ele contém algumas palavras:
Cada, Cardo, Arame, Arca, Bote, boca, vira, Voa, Dura, dedo, Elfo, eifel, fardo, Fargo, guia, Guria, hostel, Hostil, Juno, jim, Inca, indo, Karma, kraken, Lele, lili, Mosca, mouse
Nunca
# Um comentário
never
Opera
opus
baiog
beirag
bicag
querer
Queijo
Leva
Hostel
hostel
Sistema operacional Linux
GNU
gnu
GNULinux
gnulinux
---
Comando REGEX:
egrep "Linux" Aula1.txt
---
Resultado:
$ egrep "Linux" Aula1.txt
Linux
LinuxDistro
Linux
Sistema operacional Linux
GNULinux
---
Comando Linux REGEX Bash para linhas em branco:
egrep "^$" Aula1*
egrep -v "^$" Aula1*
---
OBS:
No uso de caracteres especiais há diferenças entre REGEX e File Globbing
---
Asterisco *
Comando Linux exemplos REGEX Bash asterisco:
egrep "A[a-r]*" Aula1*
egrep "A[a-r]e*" Aula1*
egrep "A[a-r]m*" Aula1*
egrep "A[a-r]c*" Aula1*
---
OBS:
e* Pode não existir ou pode exitir uma ou várias vezes.
---
No arquivo Aula1.txt posso colocar estas palavras (strings) abaixo e ver o que posso aprender sobre REGEX com a ajuda delas:
Somak
Somek
Somik
somak
somek
somik
Soma
Some
Somi
soma
some
somi
---
Comandos Linux REGEX Bash a executar:
1) egrep "S[a-i]k*" Aula1.txt
2) egrep "S[a-i]o*" Aula1.txt
3) egrep "S[a-i]s*" Aula1.txt
4) egrep "S[a-u]k*" Aula1*
5) egrep "S[a-u]o*" Aula1*
6) egrep "S[a-z]k*" Aula1.txt
7) egrep "S[a-z]m*" Aula1.txt
8) egrep "[Ss][a-u]k*" Aula1*
9) egrep "[Ss][a-u]m*" Aula1*
---
Muito interessante mesmo.
---
Em vez de usar o asterisco *, vai usar o símbolo de mais +.
---
Usando + o caractere anterior tem que aparecer uma ou mais vezes.
---
egrep "S[a-z]m+" Aula1.txt
egrep "S[a-u]m+" Aula1.txt
---
Adicionando antes do k o símbolo $
---
egrep "S[a-u]$k+" Aula1*
egrep "[Ss][a-u]$k+" Aula1*
---
Bem interessante.
---
egrep "S[a-z]$k+" Aula1.txt
egrep "[Ss][a-u]$k+" Aula1*
---
egrep "S[a-z]$m+" Aula1.txt
egrep "[Ss][a-u]$m+" Aula1*
---
No Arquivo1.txt para praticar comandos Linux REGEX posso ter escrito ou vou escrever as palavras:
pag
peg
pig
pog
pug
---
Comandos Linux REGEX Bash:
1) egrep "p[ae]g" Aula1.txt
2) egrep "p[aei]g" Aula1.txt
3) egrep "p[a-v]g" Aula1.txt
---
Mais comandos Linux REGEX Bash para executar:
egrep "^pa*" Aula1*
egrep "^#" Aula1.txt
egrep -v "^pa*" Aula1*
egrep "Linux $" Aula1.txt
egrep "Linux$" Aula1.txt
egrep "Linux$*" Aula1.txt
egrep "p[ae]g+" Aula1.txt
egrep "p[aei]g+" Aula1.txt
egrep "p[a-v]g+" Aula1.txt
---
OBS:
g+ O caractere anterior (g) tem que aparecer uma ou mais vezes. Para ser encontrado, reconhecido e impresso.
---
OBS:
g? O caractere anterior pode aparecer nenhuma ou apenas uma vez.
---
Exemplos Linux REGEX:
egrep "p[a-t]g?" Aula1.txt
Eo pug? Mandei buscar somente de a até t (a-t) aí o pug não vai constar.
---
OBS:
. O ponto é um caractere e espaços também são caracteres aqui no Linux.
---
Exemplos comando Linux REGEX de uso do ponto:
egrep "te.to" Aula1.txt
egrep "te..o" Aula1.txt
egrep "te..." Aula1.txt
---
OBS:
.* Ponto asterisco. O caracete anterior tem que existir mas pode haver qualquer coisa depois.
---
Exemplos comando Linux REGEX com ponto e asterisco:
egrep "P.*Linux" Aula1*
egrep "P....*Linux" Aula1*
egrep "P...*Linux" Aula1*
egrep "P..*Linux" Aula1*
---
OBS:
A proteção do ponto \. O ponto significa um único caractere nesta posição.
---
egrep "[Ll]inux." Aula1*
---
Usando a proteção do ponto digo que quero o caractere ponto. Exemplo Linux REGEX:
egrep "[Ll]inux\." Aula1*
---
Resultado do comando Linux REGEX:
$ egrep "[Ll]inux\." Aula1*
Para onde tem Linux.
---
Outros exemplos de proteção REGEX Linux somado ao uso de .* e usando File Globbing * e ? também:
egrep "\[Linux\]" Aula1*
egrep "\[Linux\].*linux\." Aula1????
---
OBS:
O uso da barra invertida é bastante usado em shell script.
---
Exemplo comando Linux REGEX Bash usando sed:
sed '/^#/d' Aula1*
sed '/^#/d'
---
OBS:
Para sair de um comando executado, use as teclas Ctrl+c
---
sed 's/[Ll]inux/Unix/g' Aula1*
---
<\code>