# Explicador de findstr, substr e getfield

> Rode findstr, substr ou getfield da F5 na sua string e veja o casamento, o salto, o terminador e o resultado marcados numa régua, ao lado do Tcl puro que faz o mesmo trabalho. Casos que a F5 não documenta são sinalizados. Local, sem rede.

- Tool: https://ronutz.com/pt-BR/tools/f5-irules-string-extract
- Family: Redes

---

## O que faz

`findstr`, `substr` e `getfield` são comandos que a F5 acrescenta aos iRules para recortar um pedaço de um valor. A ferramenta roda o que você escolher na sua string e marca o resultado numa régua: a string procurada encontrada, os caracteres pulados, o terminador, os separadores e o campo devolvido. Ao lado, o Tcl puro que faz o mesmo trabalho roda no mesmo motor, para você ver se os dois concordam de fato.

## Os três comandos

- `findstr string search ?skip? ?terminator?` encontra `search`, avança `skip` caracteres a partir do início do casamento e devolve até o terminador. Exemplo da F5: `findstr "<sip:+12065551234@sip.example.com>" "@" 1 ">"` devolve `sip.example.com`.
- `substr string skip ?terminator?` começa no índice `skip`, onde 0 é o primeiro caractere. `substr "abcdefghijklm" 2 "gh"` devolve `cdef`.
- `getfield string separator field` divide em cada ocorrência do separador, que pode ser um caractere ou uma string, e devolve aquele campo, contando a partir de 1.

Em `findstr` e `substr`, um terminador numérico é um comprimento (até essa quantidade de caracteres, menos se a string acabar antes); qualquer outro terminador é um texto antes do qual parar. Todos os exemplos publicados pela F5 para esses comandos são reproduzidos exatamente pelos testes da ferramenta.

## O que a F5 não documenta

Onde as páginas da F5 se calam, a ferramenta declara a suposição que fez, marcada como "Não documentado pela F5":

- `findstr` quando a string procurada não aparece. A ferramenta devolve uma string vazia. A F5 diz que `findstr` equivale a `string range` com `string first`, mas esse equivalente devolve a string inteira nesse caso, então as duas descrições não podem estar certas ao mesmo tempo.
- Uma contagem 0. A regra da F5 ("essa quantidade de caracteres") devolveria nada, mas o próprio exemplo de `substr` da F5 com 0 devolve o resto da string; a ferramenta segue o exemplo, e uma nota de colaborador na página da referência de API da F5 relata que 0 não funcionou nas versões 11.5.4 e 11.6.0.
- Um salto além do fim, um salto ou uma contagem negativos, um terminador vazio e um número de campo do `getfield` fora dos campos existentes.

Confirme esses casos num BIG-IP antes de depender deles.

## Fontes

- [Referência tmsh da F5: findstr](https://clouddocs.f5.com/cli/tmsh-reference/latest/modules/ltm/ltm_rule_command_findstr.html) (lido em 2026-10-03)
- [Referência tmsh da F5: substr](https://clouddocs.f5.com/cli/tmsh-reference/latest/modules/ltm/ltm_rule_command_substr.html) (lido em 2026-10-03)
- [Referência tmsh da F5: getfield](https://clouddocs.f5.com/cli/tmsh-reference/latest/modules/ltm/ltm_rule_command_getfield.html) (lido em 2026-10-03)
- [Referência de iRules da F5: substr, com a nota de colaborador sobre a contagem 0](https://clouddocs.f5.com/api/irules/substr.html) (lido em 2026-10-02)
- [Manual do Tcl 8.4: string](https://www.tcl-lang.org/man/tcl8.4/TclCmd/string.htm) (lido em 2026-10-03)

## Standards and references

- [F5 tmsh reference: findstr](https://clouddocs.f5.com/cli/tmsh-reference/latest/modules/ltm/ltm_rule_command_findstr.html) - findstr syntax, skip_count and terminator rules, and the two published examples the vectors reproduce
- [F5 tmsh reference: substr](https://clouddocs.f5.com/cli/tmsh-reference/latest/modules/ltm/ltm_rule_command_substr.html) - substr syntax, the count and terminator rules, and the five published examples the vectors reproduce
- [F5 tmsh reference: getfield](https://clouddocs.f5.com/cli/tmsh-reference/latest/modules/ltm/ltm_rule_command_getfield.html) - getfield syntax: field numbers start at 1 and the separator may be a character or a string
- [F5 iRules reference: substr (API reference page)](https://clouddocs.f5.com/api/irules/substr.html) - the same examples, with a contributor note that the 0 count did not work for them on 11.5.4 and 11.6.0
- [F5 K6091: The version of Tcl used to develop iRules](https://my.f5.com/manage/s/article/K6091) - the iRules command set was developed from Tcl base version 8.4.6, which is used in all BIG-IP versions; the engine models that version
- [Tcl 8.4 manual: string](https://www.tcl-lang.org/man/tcl8.4/TclCmd/string.htm) - the subcommands, index forms (integer, end, end-N), map ordering and its single pass, compare and bytelength
- [Tcl 8.4.6 source code, tag core-8-4-6 on GitHub](https://github.com/tcltk/tcl/tree/core-8-4-6) - the reference interpreter: the engine was differential-tested against tclsh built from this tag (commit bf3eeadc)

## Related reading

- [Comandos string do Tcl em iRules: índices, map, match, compare e trim](https://ronutz.com/pt-BR/learn/irules-string-commands.md): O comando string faz a maior parte do trabalho com texto num iRule, e cada subcomando tem uma regra que costuma ser errada: índices que leem 010 como octal, um map que é uma passada só, um trim que remove um conjunto de caracteres e não uma palavra, e um compare que põe toda maiúscula antes de toda minúscula.
- [findstr, substr e getfield: o que a F5 documenta e o que deixa em aberto](https://ronutz.com/pt-BR/learn/irules-findstr-substr-getfield.md): A F5 acrescenta três comandos aos iRules para recortar um pedaço de um valor. findstr encontra e pula, substr começa num índice, getfield divide num separador, e dois deles recebem um terminador que é um comprimento ou um texto de parada. Veja cada regra com os próprios exemplos da F5, o Tcl puro que faz o mesmo trabalho e os casos que as páginas da F5 não resolvem.
- [scan em iRules: como desmontar valores sem expressões regulares](https://ronutz.com/pt-BR/learn/irules-scan-command.md): A própria referência da F5 recomenda comandos de string como scan no lugar de expressões regulares. scan é curto e rápido, mas o resultado conta conversões e não casamentos, -1 e 0 significam coisas diferentes, e o Tcl 8.4.6 guarda inteiros por meio de um int em C de 32 bits. Veja como ler um formato e as verificações que tornam um scan confiável.
- [Zero ou um: onde o BIG-IP começa a contar](https://ronutz.com/pt-BR/learn/bigip-zero-or-one.md): O Tcl conta a partir de 0, vários comandos que a F5 acrescenta contam a partir de 1, contadores devolvem 1 para o primeiro item, muitos zeros da configuração são valores e não posições, e o mesmo segmento de caminho é o elemento 1, o campo 2 ou o índice 1 dependendo de quem pergunta. Veja de onde vem cada um, nas palavras da própria F5, com as armadilhas e os lugares em que as páginas da F5 se contradizem.
