Pesquisa de site

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’.

$ cat products.txt

$ 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.

$ cat products.txt

$ 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.

$ cat products.txt

$ 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.

$ cat products.txt

$ 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.

$ cat products.txt

$ 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 '.

$ cat products.txt

$ 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.

$ cat products.txt

$ 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() .

$ cat products.txt

$ 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`.

Artigos relacionados: