&
é especial no texto de substituição: significa “a parte inteira da entrada que foi correspondida pelo padrão”, então o que você está fazendo aqui substitui user=&uidX
por user=user=&uidXsysuserid.
. Para inserir um e comercial real no texto de substituição, use \&
.
Outra coisa que parece errada é que .
no padrão de pesquisa representa qualquer caractere (exceto uma nova linha), mas o .
no final do texto de substituição é um ponto literal. Se você quiser substituir somente a string literal user=&uid.
, proteja o .
com uma barra invertida.
sed -e 's/user=&uid\./user=\&sysuserid./g'
Se você quiser substituir qualquer caractere e preservá-lo no resultado, coloque o caractere em um grupo e use na substituição para se referir a esse grupo.
sed -e 's/user=&uid\(.\)/user=\&sysuserid/g'
Na verdade, dada a repetição entre o texto original e a substituição, você deve usar grupos de qualquer maneira:
sed -e 's/\(user=&\)u\(id\.\)/sysuser/g'
i.e. "Substitua u
por sysuser
entre user=&
e id.
".