Você pode usar -b
para obter o deslocamento de bytes, que é o mesmo que a posição para texto simples (mas não para UTF-8 ou similar).
$ echo "RAMSITALSKHMAN|1223333" | grep -aob '|'
14:|
Acima, eu uso a opção -a
para dizer ao grep para usar a entrada como texto; necessário ao operar em arquivos binários, e a opção -o
somente exibe os caracteres correspondentes.
Se você quer apenas a posição, você pode usar o grep para extrair apenas a posição:
$ echo "RAMSITALSKHMAN|1223333" | grep -aob '|' | grep -oE '[0-9]+'
14
Se você obtiver resultados estranhos, verifique se o grep tem cores ativadas. Você pode desabilitar as cores passando --colors=never
para grep ou prefixando o comando grep com \
(o que desabilitará todos os aliases), por exemplo:
$ echo "RAMSITALSKHMAN|1223333" | grep -aob '|' --color=never | \grep -oE '^[0-9]+'
14
Para uma string que retorna várias correspondências, passe por head -n1
para obter a primeira correspondência.
Note que eu uso os dois acima, e note que o último não irá funcionar se o grep for "aliado" através de um executável (script ou outro), somente quando usar aliases.