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 | yCorresponder 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
bCorresponde a um limite de palavra (a posição entre uma palavra e um espaço)
BCorresponde a um limite nonword (exemplo: 'uxB' corresponde ao 'ux' em "tuxedo" mas não o 'ux' em "Linux"
dCorresponde a um caractere de dígito
DCorresponde a um caractere não dígito
fCorresponde a um caractere de feed de formulário
nCorresponde a um caractere de nova linha
rCorresponde a um caractere de retorno de carro
sCorresponde a qualquer caractere de espaço em branco (incluindo espaço, tabulação, feed de formulário, etc.)
SCorresponde a qualquer caractere que não seja espaço em branco
tCorresponde a um caractere de tabulação
vCorresponde a um caractere de tabulação vertical
wCorresponde a qualquer caractere de palavra, incluindo sublinhado
WCorresponde a qualquer caractere não pertencente à palavra
unCorresponde 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!
🙂