o rush tem uma boa solução de uma linha ; aqui está uma função bash simples que imprime todas as correspondências na string:
function pratappos() {
target=$1; shift
pos=1
while [[ $# -gt 0 ]]
do
[[ "$1" = "$target" ]] && echo $pos
shift; ((++pos))
done
unset target pos
}
Ele é generalizado para procurar por qualquer string em uma determinada lista, portanto, por exemplo, você configuraria essa função (em seu .bashrc ou em seu shell atual) e, em seguida, a chamaria como:
pratappos sig[4] Xckt VDD VSS sig[1] sig[2] sig[3] sig[4] sig[5] sig[6] CKT
7
ou (dois jogos):
pratappos sig[4] Xckt VDD VSS sig[1] sig[2] sig[3] sig[4] sig[5] sig[6] CKT sig[4]
7
11
... onde o primeiro parâmetro que você passa para ele é tomado como a string que você deseja procurar, seguido pelo resto da string para pesquisar. Ele determina a posição dos argumentos usando shift
, que verá sua string dada como separada por $ IFS.
Para esclarecer o ponto anterior:
pratappos 'foo bar' a b foo bar 'foo bar' rest here
5