Talvez:
sed 's/\(\(^\|:\)123@example\.com:\)\([^:]\+\)/foo/'
, pois não há delimitadores com escape no valor.
sed 's/\(\(^\|:\)123@example\.com:\)\([^:]\+\)/foo/'
| | | | | | | |
| | | | | | | +----- H. End of sub.
| | | | | | +------- G. Sub string
| | | | | +---------- F. Match Group 1.
| | | | +------------ E. End of Group 3.
| | | +------------------ D. Group 3.
| | +----------------------------------- C. User
| +--------------------------------------------- B. Prefix Group 2.
+--------------------------------------------------- A. Substitute
-
A:s/Substitua o comando. -
B:(^|:)Começa com o início da linha ou delimitador:, Grupo 2, parte do grupo de correspondência 1. -
C:O usuário corresponde, parte do grupo de correspondências 1. -
D:([^:]+)A parte para remover, qualquer coisa até:. Parte do grupo 3. Tudo até o próximo delimitador. Talvez seja\(:\|$\), mas como deveria terminar em:, bastaria. -
E:\)Terminando o agrupamento de remoção. -
F:Colocar o grupo de correspondências 1. Usuário + delimitador (es). -
G:fooO que quer que seja inserido como cripta. -
H:/Encerrando tudo. Optioanlly um/gpara global, mas suponha que seja apenas uma vez.