Nas suas primeiras versões, o RAC usava apenas endereçamento numérico, indicando diretamente a posição de linhas e colunas, como por exemplo [5] para especificar a quinta coluna. A partir da versão 1.2 também é possível endereçar linhas pelo seu conteúdo, independente de sua posição no texto.
Antes de conhecer as novidades, um resumo rápido dos tipos de endereço conhecidos até então:
Endereço | Tipo | Representa |
---|---|---|
3 | Linha | A terceira linha |
-3 | Contagem Reversa | A antepenúltima linha |
[3] | Coluna | A terceira coluna |
1:3 | Trecho | Da primeira a terceira linha |
1~3 | Salto | A partir da primeira linha, ande de 3 em 3 |
Apesar do poder de se especificar endereços complexos, inclusive com trechos e saltos, o endereçamento numérico exige que o usuário saiba de antemão a posição exata do pedaço desejado de texto. Embora suficiente para uma grande variedade de tarefas, esse tipo de endereçamento se torna ineficiente quando se precisa buscar por conteúdo, e não posições.
Ao invés de buscar pela "quinta linha", certas tarefas exigem buscar por linhas que contenham determinada palavra ou frase, não importando a sua posição no texto original. Ou ainda, baseado nesta palavra obter as linhas adjacentes ou um trecho entre duas palavras distintas.
O RAC torna estas tarefas triviais, bastando ao usuário apenas fornecer o endereço desejado. Entre outras possibilidades, o programa pode buscar:
Entre várias outras possibilidades que combinam um texto com a sua contagem de aparições (normal ou reversa) e linhas adjacentes.
O uso é muito simples, basta colocar a palavra ou frase a se buscar entre sinais de igual, =assim=. A contagem de aparições da palavra é especificada usando o asterisco e o contexto usa os sinais de mais e menos.
Endereço | Tipo | Representa |
---|---|---|
=abc= | Texto | Todas as linhas que contêm o texto abc |
=abc=*3 | Ocorrência | Terceira linha que contém o texto abc |
=abc=+3 | Contexto | Terceira linha após a que contém o texto abc |
=abc=-3 | Contexto | Terceira linha anterior a que contém o texto abc |
Curioso(a) porque o sinal de igual foi utilizado como delimitador? A explicação está no final deste documento.
Fácil de usar, não? Simplesmente colocar uma palavras entre iguais faz com que o RAC retorne todas as linhas do texto que contêm esta palavra. Ela pode estar no início, meio ou final da linha, tanto faz. Este comportamento é idêntico ao comando grep.
Se o desejado não forem todas as ocorrências da palavra mas apenas a primeira, terceira ou a última, basta adicionar um asterisco e informar o número. E mais, números negativos servem para contar à partir do final do texto, então =abc=*-2 retornará a linha com a penúltima aparição de "abc".
Para completar, o contexto serve para obter linhas próximas à linha com a palavra pesquisada, anteriores ou posteriores. Útil quando se tem uma palavra-chave para encontrar, mas o conteúdo desejado está na próxima linha. Exemplo: =Total de gastos=+1 retornará a linha seguinte ao texto informado, toda vez que o ele for encontrado.
Se no exemplo anterior for necessário obter a próxima linha somente da primeira aparição do texto, basta combinar os dois operadores, ficando =Total de gastos=*1+1.
Todos os conceitos dos endereços numéricos e de texto 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 texto num mesmo comando, produzindo endereços tão complicados e precisos quanto necessário.
Endereço | Representa |
---|---|
5:=abc=*1 | Trecho da quinta linha até a primeira que conter abc |
=abc=[1:10] | As dez primeiras colunas das linhas com abc |
=abc=*-1:-1 | Trecho da última linha com abc até o final do texto |
=abc=*5[-9:] | As últimas nove colunas da quinta linha com abc |
=abc=*-1:=xyz=*-1 | Trecho da última linha com abc até a última linha com xyz |
=abc=*1~3 | A partir da primeira linha com abc, ande de 3 em 3 |
=abc=*5-2:=abc=*5+2 | Quinta ocorrência da linha com abc, com contexto de 2 linhas antes e após |
Ao usar endereços com texto, algumas dúvidas podem surgir. Aqui vão as respostas para algumas delas:
\t |
Tabulação (TAB) |
\= |
Um sinal de igual literal |
\\ |
Uma barra \ literal |
- Mas por que ter um delimitador só para texto? Por que não usar Expressões Regulares de uma vez?
- Mas por que usar o = como delimitador? Isso é anti-Unix!