Quando executamos certos comandos no Unix / Linux para ler ou editar texto de uma string ou arquivo, na maioria das vezes tentamos filtrar a saída para uma determinada seção de interesse. É aqui que o uso de expressões regulares é útil.
Leia também:10 Operadores de encadeamento de Linux úteis com exemplos práticos
Uma expressão regular pode ser definida como strings que representam várias sequências de caracteres. Uma das coisas mais importantes sobre as expressões regulares é que elas permitem que você filtre a saída de um comando ou arquivo, edite uma seção de um texto ou arquivo de configuração e assim por diante.
Expressões regulares são feitas de:
(.)
ele corresponde a qualquer caractere único, exceto uma nova linha.(*)
ele corresponde a zero ou mais existências do personagem imediato que o precede.[ personagens) ]
corresponde a qualquer um dos caracteres especificados em caractere (s), também pode-se usar um hífen (-)
para significar uma gama de caracteres, como [a-f]
, [1-5]
, e assim por diante.^
ele corresponde ao início de uma linha em um arquivo.$
corresponde ao final da linha em um arquivo.\
é um personagem de escape.Para filtrar o texto, é necessário usar uma ferramenta de filtragem de texto, como awk. Você pode pensar em awk como uma linguagem de programação própria. Mas, para o escopo deste guia, use awk, iremos cobri-lo como uma ferramenta simples de filtragem de linha de comando.
A sintaxe geral do awk é:
# awk nome do arquivo 'script'.
Onde 'roteiro'
é um conjunto de comandos que são compreendidos por awk e são executados no arquivo, nome do arquivo.
Ele funciona lendo uma determinada linha no arquivo, faz uma cópia da linha e então executa o script na linha. Isso é repetido em todas as linhas do arquivo.
O 'roteiro'
está na forma '/ padrão / ação'
Onde padronizar é uma expressão regular e o açao é o que o awk fará quando encontrar o padrão fornecido em uma linha.
Nos exemplos a seguir, vamos nos concentrar nos metacaracteres que discutimos acima sob os recursos do awk.
O exemplo abaixo imprime todas as linhas do arquivo /etc/hosts uma vez que nenhum padrão é fornecido.
# awk '//{print} '/ etc / hosts.
No exemplo abaixo, um padrão localhost
foi fornecido, então awk corresponderá à linha tendo localhost no /etc/hosts
Arquivo.
# awk '/localhost/{print} '/ etc / hosts
O (.)
corresponderá a strings contendo loc, localhost, localnet no exemplo abaixo.
Quer dizer * l algum_caractere_único c *.
# awk '/l.c/{print} '/ etc / hosts.
Ele corresponderá a strings contendo localhost, localnet, linhas, capaz, como no exemplo abaixo:
# awk '/l*c/{print} '/ etc / localhost.
Você também vai perceber que (*)
tenta obter a correspondência mais longa possível que pode detectar.
Vejamos um caso que demonstra isso, pegue a expressão regular t * t
o que significa combinar strings que começam com letra t
e terminar com t
na linha abaixo:
este é o tecmint, onde você obtém os melhores tutoriais bons, como fazer, guias, tecmint.
Você terá as seguintes possibilidades ao usar o padrão /t*t/
:
isso é t. isso é tecmint. este é tecmint, onde você obtém t. este é o tecmint, onde você obtém o melhor bom t. este é o tecmint, onde você obtém os melhores bons tutoriais, como t. este é o tecmint, onde você obtém os melhores bons tutoriais, instruções, guias, t. este é o tecmint, onde você obtém os melhores bons tutoriais, how tos, guias, tecmint.
E (*)
em /t*t/
o caractere curinga permite que o awk escolha a última opção:
este é o tecmint, onde você obtém os melhores tutoriais bons, como fazer, guias, tecmint.
Tomemos por exemplo o conjunto [al1]
, aqui awk corresponderá a todas as strings contendo caracteres uma
ou eu
ou 1
em uma linha no arquivo /etc/hosts.
# awk '/[al1]/{print} '/ etc / hosts.
O próximo exemplo corresponde a strings que começam com K
ou k
Seguido por T
:
# awk '/[Kk]T/{print} '/ etc / hosts
Entenda personagens com awk:
[0-9]
significa um único número[a-z]
significa corresponder a uma única letra minúscula[A-Z]
significa corresponder a uma única letra maiúscula[a-zA-Z]
significa corresponder a uma única letra[a-zA-Z 0-9]
significa corresponder a uma única letra ou númeroVejamos um exemplo abaixo:
# awk '/[0-9]/{print} '/ etc / hosts
Todas as linhas do arquivo /etc/hosts contém pelo menos um único número [0-9]
no exemplo acima.
Corresponde a todas as linhas que começam com o padrão fornecido como no exemplo abaixo:
# awk '/^fe/{print} '/ etc / hosts. # awk '/^ff/{print} '/ etc / hosts.
Corresponde a todas as linhas que terminam com o padrão fornecido:
# awk '/ab$/{print} '/ etc / hosts. # awk '/ost$/{print} '/ etc / hosts. # awk '/rs$/{print} '/ etc / hosts.
Ele permite que você tome o caractere que o segue como um literal, ou seja, considere-o exatamente como é.
No exemplo abaixo, o primeiro comando imprime todas as linhas do arquivo, o segundo comando não imprime nada porque eu quero corresponder a uma linha que tem $25.00, mas nenhum caractere de escape é usado.
O terceiro comando está correto, uma vez que um caractere de escape foi usado para ler $ como isso é.
# awk '//{print} 'deals.txt. # awk '/$25.00/{print} 'deals.txt. # awk '/\$25.00/{print} 'deals.txt.
Isso não é tudo com o awk ferramenta de filtragem de linha de comando, os exemplos acima são as operações básicas do awk. Nas próximas partes, iremos avançar sobre como usar recursos complexos do awk. Obrigado por ler e por quaisquer acréscimos ou esclarecimentos, poste um comentário na seção de comentários.