O tutorial ao qual você está vinculado é muito superficial.
Se você quiser usar o sed com seriedade, sugiro link em vez disso.
O comando s no sed usa from pattern , to string e, opcionalmente, flags . Tradicionalmente, eles são separados por um caractere / , mas qualquer pontuação pode ser usada e isso é sensato se os argumentos de ou para contém / caracteres.
Portanto, nesse caso, os sinalizadores são g , o padrão de é (^[a]|\. [a-z]) e a string é \U&\E
Neste ponto, você precisa saber como entender o padrão. Os caracteres () são usados para agrupar partes do padrão. A | é uma or das operações, então this|that corresponderia a this ou that . O ^ corresponde ao início de uma linha e o [a] corresponde à letra a , por isso ^[a] corresponde a uma letra a no início de uma linha. O \. corresponde a um caractere . , o espaço corresponde a um espaço e o [a-z] corresponde a um caractere entre a e z inclusive (esperamos que sejam todas as letras minúsculas e nada mais). Juntando isso, você recebe \. [a-z] corresponde a um ponto final (período) seguido por um espaço seguido por uma letra entre a e z inclusive.
A string \U&\E é decodificada da seguinte forma. os & são os caracteres que correspondem ao padrão de origem. O \U diz para converter o que segue para maiúsculas e o \E diz para terminar a conversão. O \ U e \ E são extensões do gnu para sed. Aqui está o POSIX sed
As bandeiras g dizem para repetir a correspondência quantas vezes forem possíveis e fazer as substituições.
Assim, o código que você copiou do tutorial converte um minúsculo no início de uma linha ou uma sequência de "espaço de período lower_case_letter" para maiúscula.