Questa sintassi è più avanzata di quella che grep usa di base perché stai usando l'opzione -E che indica a grep che deve interpretare il pattern considerandolo una espressione regolare estesa. Si può andare oltre quando è necessario, usando l'opzione -P per sfruttare una sintassi più potente, Perl compatibile.
\b indica che tutto quello che segue nella regex matcha solo se nel testo ci si trova all'inizio di una parola
[0-9] è una classe di caratteri, in questo caso matcha qualsiasi cifra da 0 a 9; per es
[a-zA-Z] corrisponderebbe a qualsiasi lettera minuscola o maiuscola
{1,3} è un quantificatore e stabilisce che l'elemento precedente matcha solo se è presente minimo 1 volta e massimo 3 volte
\ è il carattere di escape che modifica il significato del carattere seguente. In questo caso il carattere seguente è il
. : il punto nelle regex è un metacarattere "jolly" che matcha qualsiasi carattere nel testo. Nel nostro caso invece noi vogliamo la corrispondenza proprio con un punto, letteralmente. Allora
\. significa proprio questo, matcha solo se trova nel testo il carattere punto
Le parentesi tonde racchiudono un subpattern, questo subpattern lo vogliamo ripetuto esattemente 3 volte ( . . . )
{3}
sarebbe stato equivalente ma meno leggibile scrivere:
In questo forum passano esperti di grep, quindi se non sono stato chiaro chiedi e aspetta paziente che intervengano. Ti suggerisco comunque di studiare man grep e man pcrepattern mano a mano che ti imbatti in una cosa nuova nel campo delle regex