&es especial en el texto de reemplazo: significa “toda la parte de la entrada que se corresponde con el patrón”, así que lo que estás haciendo aquí reemplaza user=&uidXcon user=user=&uidXsysuserid.. Para insertar un ampersand real en el texto de reemplazo, use \&.
Otra cosa que parece incorrecta es que .en el patrón de búsqueda se encuentra cualquier carácter (excepto una nueva línea), pero .al final del texto de reemplazo hay un punto literal. Si desea reemplazar solo la cadena literal user=&uid., protéjala .con una barra diagonal inversa.
sed -e 's/user=&uid\./user=\&sysuserid./g'
Si desea reemplazar cualquier carácter y preservarlo en el resultado, coloque el carácter en un grupo y úselo \1en el reemplazo para referirse a ese grupo.
sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'
De hecho, dada la repetición entre el texto original y el reemplazo, debería usar grupos de todos modos:
sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'
es decir, "reemplazar upor sysuserentre user=&y id.".
Gilles 'SO- deja de ser malvado'
fuente
&es un personaje especial, por lo que debe escaparse cuando se usa en el RHS; en su caso, debe correr,'s/user=&uid./user=\&sysuserid./g'aunque sospecho que también necesita escapar del punto en el LHS para que coincida con un punto literal, por lo que realmente necesita's/user=&uid\./user=\&sysuserid./g'