&
является особенным в тексте замены: он означает «вся часть ввода, которая соответствует шаблону», так что вы? re заменяет user = & uidX
на user = user = & uidXsysuserid.
. Чтобы вставить действительный амперсанд в текст замены, используйте \ &
.
Другая вещь, которая выглядит неправильно, - это .
в шаблоне поиска означает любой символ (кроме символа новой строки), кроме .
в конце текста замены стоит буквальная точка. Если вы хотите заменить только буквальную строку user = & uid.
, защитить .
с обратной косой чертой.
sed -e 's/user=&uid\./user=\&sysuserid./g'
Если вы хотите заменить какой-либо один символ и сохранить его в результате, поместите этот символ в группу и используйте \ 1
в замене для ссылки на эту группу.
sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'
Фактически, учитывая повторение между исходным текстом и заменой, вы все равно должны использовать группы:
sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'
т.е. «Замените u
на sysuser
между user = &
и id.
».