Seu padrão está procurando 1532
, mas não diz nada sobre o que vem depois:
$ printf '1532\n15321\n1532foo\n' | grep -o '1532'
1532
1532
1532
Dependendo do que você deseja fazer, você pode limitar seu padrão a coincidir apenas com uma nova linha:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\n' filename
Ou, se houver espaço em branco após o número antes do final da linha:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\s*\n' filename
Como alternativa, se você puder ter outras coisas na mesma linha, use \b
para garantir que o número ocorra antes de um limite de palavras:
grep -Pzo '@<TRIPOS>MOLECULE(?:.*\n)*?\K1532\b' filename