Como usar expressões AWK e regulares para filtrar texto ou string nos arquivos

- 2108
- 663
- Robert Wunsch DVM
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 úteis de encadeamento Linux com exemplos práticos
O que são expressões regulares?
Uma expressão regular pode ser definida como uma cordas que representam várias sequência de caracteres. Uma das coisas mais importantes sobre expressões regulares é que elas permitem filtrar a saída de um comando ou arquivo, edite uma seção de um texto ou arquivo de configuração e assim por diante.
Características da expressão regular
Expressões regulares são feitas de:
- Caracteres comuns como o espaço, sublinhado (_), a-z, a-z, 0-9.
- Meta caracteres que são expandidos para caracteres comuns, eles incluem:
(.)
ele corresponde a qualquer caractere, exceto uma nova linha.(*)
corresponde a zero ou mais existências do caráter imediato que o precedeu.[ personagens) ]
Ele corresponde a qualquer um dos caracteres especificados em caracteres, também pode -se usar um hífen(-)
para significar uma variedade de personagens como[a-f]
,[1-5]
, e assim por diante.^
Combina o início de uma linha em um arquivo.$
corresponde ao fim da linha em um arquivo.\
é um personagem de fuga.
Para filtrar o texto, é preciso 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 para usar Awk, Vamos cobri -lo como uma simples ferramenta de filtragem de linha de comando.
A sintaxe geral do AWK é:
# nome do arquivo 'script' awk
Onde 'roteiro'
é um conjunto de comandos que são entendidos por Awk e são executados em arquivo, nome do arquivo.
Funciona lendo uma determinada linha no arquivo, faz uma cópia da linha e depois executa o script na linha. Isso é repetido em todas as linhas do arquivo.
O 'roteiro'
está na forma '/ padrão/ ação'
onde padrão é uma expressão regular e o Ação é o que o Awk fará quando encontrar o padrão fornecido em uma linha.
Como usar a ferramenta de filtragem AWK no Linux
Nos exemplos a seguir, nos concentraremos nos personagens da meta que discutimos acima sob os recursos do AWK.
Um exemplo simples de usar awk:
O exemplo abaixo imprime todas as linhas no arquivo /etc/hosts Uma vez que nenhum padrão é dado.
# awk '//print '/etc/hosts

Use Awk com padrão:
I o exemplo abaixo, um padrão LocalHost
foi dado, então o Awk corresponderá à linha tendo LocalHost no /etc/hosts
arquivo.
# awk '/localhost/print ' /etc /hosts

Usando awk com (.) curinga em um padrão
O (.)
vai combinar strings contendo loc, LocalHost, Localnet No exemplo abaixo.
Isto é, dizer * L Some_single_Character C *.
# awk '/eu.c/print ' /etc /hosts

Usando AWK com (*) caractere em um padrão
Ele corresponderá a strings contendo LocalHost, Localnet, linhas, capaz, Como no exemplo abaixo:
# awk '/l*c/print ' /etc /localhost

Você também perceberá que (*)
tenta obter a partida mais longa possível, pode detectar.
Vamos olhar para um caso que demonstra isso, tome a expressão regular t*t
o que significa que combina strings que começam com a carta t
e terminar com t
Na linha abaixo:
Este é o Tecmint, onde você obtém os melhores bons tutoriais, como fazer, guias, Tecmint.
Você receberá as seguintes possibilidades quando usar o padrão /t*t/
:
Isso é t Esta é um pouco, isso é um ponto de vista, onde você consegue isso é o TECMINT, onde você obtém o melhor bom t Esta é uma parte de tecmint, onde você obtém os melhores tutoriais, como isso é Tecmint, onde você obtém os melhores tutoriais bons , como Tos, guias, t This Is Tecmint, onde você obtém os melhores bons tutoriais, como 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 bons tutoriais, como fazer, guias, Tecmint
Usando awk com set [personagens (s)]
Tomemos, por exemplo, o conjunto [Al1]
, Aqui o Awk corresponderá a todas as cordas que contêm caráter a
ou eu
ou 1
em uma linha no arquivo /etc/hosts.
# awk '/[al1]/print ' /etc /hosts

O próximo exemplo corresponde às cordas começando com qualquer K
ou k
seguido pela T
:
# awk '/[Kk] t/print ' /etc /hosts

Especificando caracteres em um intervalo
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 superior[A-ZA-Z]
significa corresponder a uma única letra[A-ZA-Z 0-9]
significa corresponder a uma única letra ou número
Vamos ver um exemplo abaixo:
# awk '/[0-9]/print ' /etc /hosts

Toda a linha do arquivo /etc/hosts contém pelo menos um único número [0-9]
No exemplo acima.
Use awk com (^) meta personagem
Ele 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

Use awk com ($) meta personagem
Combina 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

Use Awk com (\) Escape Charact
Ele permite que você leve o personagem a segui.
No exemplo abaixo, o primeiro comando imprime toda a linha no arquivo, o segundo comando não imprime nada porque eu quero corresponder a uma linha que tem $ 25.00, Mas nenhum personagem de fuga é usado.
O terceiro comando está correto, pois um personagem de fuga foi usado para ler $ como isso é.
# awk '//Print 'ofertas.txt # awk '/$ 25.00/Print 'ofertas.txt # awk '/\ $ 25.00/Print 'ofertas.TXT

Resumo
Isso não é tudo com o Awk Ferramenta de filtragem de linha de comando, os exemplos acima de as operações básicas de Awk. Nas próximas partes, estaremos avançando sobre como usar características complexas de Awk. Obrigado por ler e por quaisquer adições ou esclarecimentos, poste um comentário na seção de comentários.
- « SMEM-relata o consumo de memória por processo e base por usuário no Linux
- Como usar awk para imprimir campos e colunas no arquivo »