Linux comandos REGEX exemplos



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>

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 -n1 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 é diferentes e faz coisas que os outros não fazem.

---

echo $0
echo $SHELL
tail /etc/passwd

---

Uso de aspas:

caracteres especiais.

* / $ ``

As `` fazem um sub-comando dentro do shell.

---

Aspas protegem.

echo *

echo "*"

aspas duplas protegem o caractere.

Pode usar apóstrofos para proteger.

echo '*'

Mas 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:

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.

---

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 \nNunca \n \n# Um comentário \n \nnever\nOpera \nopus \nbaiog \nbeirag \nbicag \nquerer \nQueijo \nLeva \nLinux \nlinux \nLinuxDistro \nHostel \nhostel \nLinux \nlinux \nSistema operacional Linux \nGNU \ngnu \nGNULinux \ngnulinux \n' > Aula1.txt

---

Comandos para imprimir o texto no terminal:

cat Aula1.txt
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*

---

Resultado do REGEX com File Globbing:

$ egrep "b[a]*" 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

---

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

---

REGEX 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 exemplos REGEX asterisco:

egrep "A[a-r]*" Aula1*
egrep "A[a-r]e*" Aula1*

---

OBS:
e* Pode não existir ou pode exitir uma ou várias vezes.

---

Para por aqui hoje. Sabe, aqui no Brasil a crise tá braba mesmo!

A gente paga para aprender qualquer coisa na internet.

Paga para aprender a digitar, paga para saber shell script, para para saber File Globbing e para caro para aprender REGEX e eu também pago.

Mas não cobro nada para transmitir o conhecimento meu, que foi adquirido por mim através do meu estudo e esforço pessoal.

Existem bloqueios para conteúdo gratúito oferecido por outros sites em outros países, em universidades gratúitas do exterior que você poderia aprender tudo de graça se souber estudar estas coisas em inglês. Mas se você está no Brasil tudo passa por um filtro e quem quer aprender é rastreado e muitas vezes corre o risco de ser hackeado. Não por estrangeiros, mas talvez pelos nossos irmãos brasileiros que precisam sobreviver. Talvez. Ou não. Ou não.

---

Até Breve!

---

:)

---



Linux correspondência de padrões

semanickz

Linux anotação linguagens

Anotação expressões regulares

Expressões regulares

Expressões regulares têm suas raízes na teoria da linguagem computacional. A maioria dos estudantes de ciência da computação aprende que as linguagens que podem ser denotadas por expressões regulares são precisamente as mesmas que são aceitas por autômatos finitos. As expressões regulares ... são capazes de expressar mais complexidade e, portanto, não são as mesmas que você pode ter aprendido nas aulas de informática, embora a herança seja clara.
-- Ian Shields

Expressões regulares são um meio poderoso de correspondência de padrões e análise de cadeia de caracteres que podem ser aplicadas em muitas instâncias. Com esta incrível ferramenta você pode:

  • Validar entrada de texto
  • Pesquisar (e substituir) o texto em um arquivo
  • Renomear arquivos em lote
  • Realize buscas incrivelmente poderosas por arquivos
  • Interaja com servidores como o Apache
  • Padrões de teste dentro de seqüências de caracteres
  • E muito mais

A coisa sobre expressões regulares é que elas são confusas. Para o usuário Linux, as expressões regulares parecem uma outra língua e na real, elas são mesmo outra língua. Mas não é a linguagem mais difícil do mundo. Depois de uma quatro ou cinco horas de estudo uma pessoa comum já consegue buscar uma string em um arquivo.

Exemplo(s):

egrep -n 'limpeza' texto-teste.txt

Então considerando o poder que essa ferramenta oferece, quem gosta de usar o Bash devia aprender. Não precisa ser apenas admin. O usuário final é de certa forma, o administrador do sistema operacional que instalou em seu hardware. Todavia demore um pouco para dominar as expressões regulares, será um tempo muito bem gasto.

O que compõe as expressões regulares?

Existem dois tipos de caracteres a serem encontrados nas expressões regulares:

  • caracteres literais
  • metacaracteres

Caracteres literais são caracteres padrão que compõem as strings que você criou. Cada caractere nesta tal frase é um caractere literal. Você poderia usar uma expressão regular para procurar por cada caractere literal nessas strings.

Metacaracteres são completamente diferentes; eles são o que dão às expressões regulares o seu poder. Com metacaracteres, você pode fazer muito mais do que procurar por um único caractere. Metacaracteres permitem pesquisar combinações de strings e muito mais. A lista de metacaracteres de expressões regulares é mais ou menos assim:

\
Indica que o próximo caractere é um caractere especial, um literal, uma referência de referência ou um escape octal

^
Indica o início de uma string de entrada

$
Indica o final da string de entrada

*
Indica que a subexpressão precedente deve ser correspondida zero ou mais vezes

+
Indica que a subexpressão precedente deve ser correspondida uma ou mais vezes

?
Indica que a subexpressão precedente deve ser correspondida como zero ou uma vez

{n}
Corresponde exatamente n vezes (em que n é um inteiro não negativo)

{n,}
Corresponder pelo menos n vezes (em que n é um inteiro não negativo)

{n, m}
Corresponde pelo menos n e no máximo m vezes (onde m e n são inteiros não negativos e n <= m)

.
Corresponde a qualquer caractere único, exceto "n"

[xyz]
Corresponder a qualquer um dos caracteres incluídos

x | y
Corresponder x ou y

[^ xyz]
Corresponder a qualquer caractere não fechado

[a-z]/
Corresponde a qualquer caractere no intervalo especificado.

[^ a-z]
Corresponde a qualquer caractere que não esteja no intervalo especificado

b
Corresponde a um limite de palavra (a posição entre uma palavra e um espaço)

B
Corresponde a um limite nonword (exemplo: 'uxB' corresponde ao 'ux' em "tuxedo" mas não o 'ux' em "Linux"

d
Corresponde a um caractere de dígito

D
Corresponde a um caractere não dígito

f
Corresponde a um caractere de feed de formulário

n
Corresponde a um caractere de nova linha

r
Corresponde a um caractere de retorno de carro

s
Corresponde a qualquer caractere de espaço em branco (incluindo espaço, tabulação, feed de formulário, etc.)

S
Corresponde a qualquer caractere que não seja espaço em branco

t
Corresponde a um caractere de tabulação

v
Corresponde a um caractere de tabulação vertical

w
Corresponde a qualquer caractere de palavra, incluindo sublinhado

W
Corresponde a qualquer caractere não pertencente à palavra

un
Corresponde n, em que n é um caractere Unicode expresso como quatro dígitos hexadecimais (como, por exemplo, u0026 para o símbolo "e" comercial)

---

Como usar metacaracteres?

Simples. Digamos que você queira corresponder a string 1 + 2 = 3.

Embora 1 + 2 = 3 seja uma expressão regular válida, se você tentou procurar essa sequência sem metacaracteres, a correspondência falharia.

Em vez disso, você teria que usar o caractere de barra invertida assim:

1\+2=3

---

Por que estamos usando apenas a barra invertida antes do + e não do =? Volte para a lista de metacaracteres e você verá que + está listado e = não está.

O metacaractere + indica que o precedente deve ser correspondido uma ou mais vezes, então 1 + 2 significaria que 1 é repetido mais duas vezes, como em 111.

Se fôssemos ficar sem \ nessa cadeia, não corresponderia a 1 + 2 = 3, corresponderia a 111 = 2 em 123 + 111 = 234.

---

Alguns exemplos fáceis

Dois outros metacaracteres muito úteis são o ^ (indica o início de uma string de entrada) e $ (indica o final de uma string de entrada). Digamos, por exemplo, que você quisesse pesquisar um longo arquivo de nomes de clientes para todos os clientes cujo sobrenome começasse com W (assumindo que todos os nomes estão listados como sobrenome, primeiro nome no arquivo). Você pode usar expressões regulares com o comando egrep da seguinte forma:

clientes.txt egrep '^W'

O comando resultante listaria todos os clientes cujo sobrenome começou com "W"

---

E se quisermos executar a mesma pesquisa, só que desta vez queremos (por qualquer motivo) listar todos os clientes cujo primeiro nome termina com “n”. Com expressões regulares, podemos fazer isso da seguinte maneira:

egrep ‘n$’ clients.txt

Naturalmente, isso só funcionará se o primeiro nome for a última cadeia de caracteres em cada linha. Se você quisesse listar todos os clientes cujo sobrenome começasse com “N” ou “W”, você poderia fazer uso dos metacaracteres ^ e [] da seguinte forma:

egrep ‘^[NW]’ clients.txt

O comando acima listaria todos os clientes cujo sobrenome começasse com “N” ou “W”

---

E se, no entanto, você quisesse listar clientes cujo primeiro e / ou último nome continha “N” ou “W” (já que isso faz distinção entre maiúsculas e minúsculas, supomos que uma letra maiúscula começará um nome de cliente)? Isso é simples; Adicionamos o metacaractere “|” (juntamente com o metacaractere “^”), que conteria a pesquisa para os primeiros caracteres, assim:

---

egrep ‘^[N|W]’ clients.txt

Também poderíamos remover o metacaractere e executar o comando da seguinte forma:

egrep ‘[NW]’ clients.txt

A saída resultante listaria todos os nomes contendo “N” ou “W”, não limitando a pesquisa aos caracteres iniciais dentro de uma string.

---

Você poderia usar um comando semelhante para procurar por quaisquer caracteres dentro de um nome (como egrep '[en]' clients.txt), que listaria todas as cadeias que continham a letra “e” ou “n”.

E se, no entanto, você quisesse combinar todas as entradas que incluíam o primeiro nome Jack e o primeiro nome Walt? Você pode fazer isso também com a ajuda do metacaractere “|” (que corresponde a x ou y. A seguinte expressão regular ilustra seu uso:

egrep ‘Walt|Jack’ clients.txt

A saída do comando deve ser exatamente como você esperava

---

Um exemplo final ilustrará como você pode usar expressões regulares para pesquisar strings de um tamanho específico. Isso é feito com o que é chamado de conjunto de caracteres. Diga (por qualquer motivo) que você deseja procurar na listagem de clientes por entradas que começam com a letra W e têm apenas seis caracteres. Para isso você usaria o metacaractere “.” Assim:

egrep ‘^[W].....,’ clients.txt

---

Como todos os nomes em nosso arquivo clients.txt são seguidos por um ",", podemos fazer isso facilmente e os resultados exibirão apenas os nomes com seis caracteres e começando com a letra "W"

Isto é apenas a superfície das expressões regulares. Para mais informações sobre esta incrível ferramenta, confira as páginas de manual regex (3) e regex (7). Expressões regulares são definitivamente um elemento da administração do Linux que você vai querer dominar. Aproveite o tempo para se educar mais com essa ferramenta e você terá um poder considerável ao alcance dos seus dedos.

---

Procure a string dada em um único arquivo

O uso básico do comando grep é procurar uma string específica no arquivo especificado, conforme mostrado abaixo.

Sintaxe:

grep "string-literal" nome-do-arquivo

Exemplo(s):

grep "palavra-busca" texto-teste.txt (A "palavra-busca" desejada, está dentro do arquivo texto-teste.txt)

---

Verificando a string dada em vários arquivos.

Sintaxe:

grep "string" padrão-arquivo

---

Este é um uso básico do comando grep. Para este exemplo, vamos copiar texto-teste.txt para texto-teste.txt (cp texto-teste.txt texto-teste1.txt). A saída do grep também incluirá o nome do arquivo na frente da linha que correspondeu ao padrão específico, conforme mostrado abaixo. Quando o shell do Linux vê o meta-caractere, ele faz a expansão e fornece todos os arquivos como entrada para o grep.

grep "palavra-busca" texto*

---

Pesquisa insensível a maiúsculas e minúsculas usando grep -i

Sintaxe:

grep -i "string" ARQUIVO

---

Este também é um outro uso básico do grep. Procura por corda (string) / padrão fornecida insensivelmente (não liga se a letra é maiúscula ou minúscula). Por isso, combina todas as palavras como "o", "O" e "O" caso insensivelmente como mostrado abaixo.

grep -i "palavra-busca" texto-teste.txt

---

Para saber mais, visito: Mais info sobre grep

---

E também nixCraft



Dicas e sugestões são muito bem vindas.



Fonte


Até Breve!

🙂