Bash passing input

& является особенным в тексте замены: он означает «вся часть ввода, которая соответствует шаблону», так что вы? 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. ».

3
12.10.2015, 18:17
0 ответов

Теги

Похожие вопросы