Вы делаете это сложнее, чем нужно - просто измените адрес электронной почты, а не всю строку. Показывать:
$ echo 'send -- "old@example.com\r"' | sed 's/old@example\.com/new@example.com/'
send -- "new@example.com\r"
Кстати, вы можете дополнительно использовать модификатор g
(global) в конце команды s///
если шаблон поиска может встречаться в строке более одного раза, и / или модификатор i
(игнорировать регистр), если вы хотите поиск без учета регистра - например, использовать оба: s/old@example\.com/new@example.com/ig
.
В любом случае, ваша команда будет выглядеть так:
sed -i.bak '19s/old@example\.com/new@example.com/' ./a
Если вам неизвестно, какой именно номер строки нужно изменить, укажите в качестве адреса строки регулярное выражение, а не номер строки:
sed -i.bak '/^send.*old@example\.com/ s/old@example\.com/new@example.com/' ./a
Еще проще изменить ВСЕ вхождения old@example.com в файле, просто не надо указывать адрес, и замена будет происходить в каждой строке файла.
sed -i.bak 's/old@example\.com/new@example.com/' ./a