Вы используете GNU sed, верно?\'
- это расширение, которое действует как якорь для конца строки в реализации базовых регулярных выражений в GNU.Таким образом, вы видите две кавычки в выводе, потому что s
соответствует концу строки и добавляет кавычку после той, которая уже была в строке.
Чтобы сделать это немного более очевидным:
echo foo | sed -e "s/\'/@/"
производит
foo@
Документировано здесь и в руководстве GNU sed
Редактировать: эквивалентв perl это \Z
(или, может быть, \z
в зависимости от того, как вы хотите обработать завершающий перевод строки).Поскольку \'
не является специальной последовательностью в регулярных выражениях perl, она просто соответствует буквальной кавычке.Как упоминалось в другом ответе и комментариях, экранирование одинарных кавычек внутри строки в двойных кавычках не является необходимым, и, как вы обнаружили, может привести к непреднамеренному поведению.