Como usar o Regex com o comando `awk`
Uma expressão regular (regex) é usada para localizar uma determinada sequência de caracteres em um arquivo. Símbolos como letras, dígitos e caracteres especiais podem ser usados para definir o padrão. Várias tarefas podem ser facilmente concluídas usando padrões regex. Neste tutorial, mostraremos como usar padrões regex com o comando `awk`.
Os caracteres básicos usados em padrões
Muitos caracteres podem ser usados para definir um padrão regex. Os caracteres mais comumente usados para definir padrões regex são definidos abaixo.
- \
Cite um novo metacaractere
- ^
Corresponde ao início de uma linha
- $
Corresponde ao final de uma linha
- |
-
Definir um alternativo
- ()
Definir um grupo
- []
Definir uma classe de personagem
- \w
Corresponder a qualquer palavra
- \s
Corresponde a qualquer caractere de espaço em branco
- \d
Corresponder a qualquer dígito
- \b
Corresponde a qualquer limite de palavra
Criar um arquivo
Para acompanhar este tutorial, crie um arquivo de texto chamado products.txt. O arquivo deve conter quatro campos: ID, Nome, Tipo e Preço.
ID Nome Tipo Preço
p1001 Monitor Monitor de 15″ $100
p1002 Rato A4tech Rato $10
p1003 Impressora Samsung $50
p1004 Scanner HP $60
p1005 Rato Logitech Rato $15
Exemplo 1: Defina um padrão regex usando a classe de caractere
O seguinte comando `awk` irá procurar e imprimir linhas contendo o caractere ‘n’ seguido pelos caracteres ‘er’.
$ awk '/[n][er]/ {print $0}' products.txt
A saída a seguir será produzida após a execução dos comandos acima. A saída mostra a linha que corresponde ao padrão. Aqui, apenas uma linha corresponde ao padrão.
Exemplo 2: Defina um padrão regex usando o símbolo ‘^’
O seguinte comando `awk` procurará e imprimirá linhas que começam com o caractere ‘p’ e incluem o número 3.
$ awk '/^p.*3/ {print $0}' products.txt
A saída a seguir será produzida após a execução dos comandos acima. Aqui, há uma linha que corresponde ao padrão.
Exemplo 3: Defina um padrão regex usando a função gsub
A função gsub() é usada para pesquisar globalmente e substituir texto. O seguinte comando `awk` procurará a palavra 'Scanner' e a substituirá pela palavra 'Router' antes de imprimir o resultado.
$ awk 'gsub(/Scanner/, "Router")' products.txt
A saída a seguir será produzida após a execução dos comandos acima. Há uma linha que contém a palavra 'Scanner', e 'Scanner' é substituído pela palavra 'Router' antes da linha ser impressa .
Exemplo 4: Defina um padrão regex com ‘*’
O seguinte comando `awk` procurará e imprimirá qualquer string que comece com 'Mo' e inclua qualquer caractere subseqüente.
$ awk '/Mo*/ {print $0}' products.txt
A saída a seguir será produzida após a execução dos comandos acima. Três linhas correspondem ao padrão: duas linhas contêm a palavra ‘Mouse‘ e uma linha contém a palavra ‘Monitor‘.
Exemplo 5: Defina um padrão regex usando o símbolo ‘$’
O seguinte comando `awk` procurará e imprimirá as linhas no arquivo que terminam com o número 5.
$ awk '/5$/ {print $0}' products.txt
A saída a seguir será produzida após a execução dos comandos acima. Há apenas uma linha no arquivo que termina com o número 5.
Exemplo 6: Defina um padrão regex usando os símbolos ‘^’ e ‘|’
O símbolo ‘^‘ indica o início de uma linha e o símbolo ‘|‘ indica uma instrução OU lógica. O seguinte comando `awk` procurará e imprimirá linhas que começam com o caractere 'p' e contêm 'Scanner' ou 'Mouse '.
$ awk '/^p.* (Scanner|Mouse)/' products.txt
A saída a seguir será produzida após a execução dos comandos acima. A saída mostra que duas linhas contêm a palavra ‘Mouse‘ e uma linha contém a palavra ‘Scanner‘. As três linhas começam com o caractere ‘p‘.
Exemplo 7: Defina um padrão regex usando o símbolo '+'
O operador ‘+‘ é usado para encontrar pelo menos uma correspondência. O seguinte comando `awk` irá procurar e imprimir linhas que contenham o caractere ‘n‘ pelo menos uma vez.
$ awk '/n+/{print}' products.txt
A saída a seguir será produzida após a execução dos comandos acima. Aqui, o caractere ‘n‘ contém ocorre pelo menos uma vez nas linhas que contêm as palavras Monitor, Impressora e Scanner.
Exemplo 8: Defina um padrão regex usando a função gsub()
O seguinte comando `awk` irá procurar globalmente pela palavra 'Impressora' e substituí-la pela palavra 'Monitor' usando a função gsub() .
$ awk 'gsub(/Printer/, “Monitor”) { print$0}' products.txt
A saída a seguir será produzida após a execução dos comandos acima. A quarta linha do arquivo contém a palavra 'Impressora' duas vezes e, na saída, 'Impressora' foi substituída pela palavra 'Monitor '.
Conclusão
Muitos símbolos e funções podem ser usados para definir padrões regex para diferentes tarefas de pesquisa e substituição. Alguns símbolos comumente usados em padrões regex são aplicados neste tutorial com o comando `awk`.