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