A solução padrão sed
seria
sed -n '/^Ravi02:/s/^[^:]*:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*$//p'
que pode ser simplificado ligeiramente para
sed -n 's/^Ravi02:[^:]*:[^:]*:[^:]*:\([^:]*\):[^:]*:[^:]*$//p'
A chave é que você precisa estar olhando (contando) dois pontos ( :
)
e outros caracteres além de dois pontos
em vez de contar caracteres ( .\{21\}
) e letras ( [a-zA-Z]\{50\}
) -
especialmente desde que você quer ser capaz
para corresponder caracteres como vírgula ( ,
) e espaço no campo de nome completo.
No meu sistema, as seguintes variações também funcionam:
-
sed -n '/^Ravi02:/s/^\([^:]*:\)\{4\}\([^:]*\)\(:[^:]*\)\{2\}$//p'
-
sed -n 's/^Ravi02:\([^:]*:\)\{3\}\([^:]*\)\(:[^:]*\)\{2\}$//p'
-
sed -nE '/^Ravi02:/s/^([^:]*:){4}([^:]*)(:[^:]*){2}$//p'
-
sed -nE 's/^Ravi02:([^:]*:){3}([^:]*)(:[^:]*){2}$//p'
mas não tenho certeza se todos eles funcionarão em todos os sistemas (por exemplo, AIX).