Eu não garantirei que ele pegará todos os casos, mas que tal
grep -Po '\.so\.\K([0-9]+\.)*[0-9]+'
- corresponde e descarta o literal
.so.
à esquerda (usando o modificador% FRP% do PCRE) - corresponde a zero ou mais ocorrências de um ou mais dígitos seguidos por
\K
- corresponde a um ou mais dígitos
Observe que não queremos ancorá-lo no final da string ( .
) como sua expressão original, para permitir uma sequência à direita, como $