RAC - Endereços usando expressões regulares (regex)

Além do endereçamento numérico (5[3:9]) e por texto (=abc=), a partir da versão 1.3 o RAC também entende expressões regulares. Com isso é possível especificar endereçamentos tão complexos quanto necessário.

Sintaxe

O endereçamento usando expressões regulares é bem similar ao endereçamento por textos, porém utilizando um delimitador diferente: a barra /. Basta colocar a expressão entre /barras/ (como no SED). Por exemplo, /^[0-9]/ é usado para procurar por linhas que se iniciam por números.

Os operadores de ocorrência e contexto também funcionam para expressões regulares, então /^[0-9]/*3 obtém a terceira linha iniciada por números e /^[0-9]/+1 obtém a linha seguinte de cada linha que se inicia por números. Ou ainda, uma mistura de ambos: /^[0-9]/*3+1 obtém a linha seguinte da terceira linha iniciada por números.

Endereçamento com Expressões Regulares
/^abc/ Exp. Regular Todas as linhas que iniciam com abc
/^abc/*3 Ocorrência Terceira linha que inicia com abc
/^abc/+3 Contexto Terceira linha após a que inicia com abc
/^abc/-3 Contexto Terceira linha anterior a que inicia com abc

Flexibilidade e Poder

Todos os conceitos dos endereços numéricos e de expressões regulares são intercambiáveis, combináveis, misturáveis. Lembre-se do brinquedo LEGO onde combinando formas básicas se obtém estruturas mais complexas.

No RAC é possível misturar endereços numéricos com expressões regulares num mesmo comando, produzindo endereços tão complicados e precisos quanto necessário.

ENDEREÇOS MAIS ELABORADOS
5:/^abc/*1 Trecho da quinta linha até a primeira que iniciar com abc
/^abc/[1:10] As dez primeiras colunas das linhas que iniciam com abc
/^abc/*-1:-1 Trecho da última linha iniciada por abc até o final do texto
/^abc/*5[-9:] As últimas nove colunas da quinta linha iniciada por abc
/^abc/*-1:/^xyz/*-1 Trecho da última linha iniciada por abc até a última linha iniciada por xyz
/^abc/*1~3 A partir da primeira linha iniciada por abc, ande de 3 em 3
/^abc/*5-2:/^abc/*5+2 Quinta ocorrência de linha iniciada por abc, com contexto de 2 linhas antes e após

Os Detalhes

Maiúsculas/Minúsculas:

Letras maiúsculas e minúsculas são diferentes. Se você pesquisar por [A-Z], apenas as letras maiúsculas serão casadas. Se quiser incluir as minúsculas também, ou faça [A-Za-z] ou use a opção de linha de comando -i, que faz o RAC tratar as letras maiúsculas e minúsculas como iguais (A == a).

Metacaracteres:

A sintaxe de expressões regulares utilizada é a moderna ERE (Extended Regular Expressions), a mesma do egrep, Perl, Python, Java, PHP e todos os aplicativos mais recentes. Segue a lista dos metacaracteres:

^ $ . [] * + ? {} | ()

Se você é acostumado com as expressões na notação antiga BRE (Basic Regular Expressions), como a utilizada pelo grep, AWK e SED, use a opção de linha de comando --bre. Nessa notação, alguns metacaracteres precisam ser escapados para se tornarem especiais, segue a lista completa:

^ $ . [] * \+ \? \{\} \| \(\)

Nota: O RAC utiliza a biblioteca de expressões regulares presente em seu sistema. A lista dos metacaracteres disponíveis pode sofrer pequenas variações. Com --bre no FreeBSD por exemplo, \+ e \? não funcionam. Esta não é uma limitação do RAC, mas da biblioteca.

Escapes:

Para inserir uma barra / literal na expressão regular, é preciso "escapá-la", precedendo-a com uma barra \. Exemplo: /^ARQ=\/etc\/passwd/.

Os "escapes" do endereçamento por texto também são reconhecidos nas expressões regulares, segue a lista completa:

\t Tabulação (TAB)
\/ Uma barra / literal
\\ Uma barra \ literal