Похоже, что ваш оригинальный файл test.csv отформатирован в Windows, с возвратом (0x0d или \r) и переводом строки (0x0a или \n) для каждой новой строки. Ваш шаблон поиска sed не исключает \r поэтому он будет сохранен во втором сопоставленном поле и выведен перед добавленным текстом.
Итак, ваша оригинальная команда:
sed -i .bak -E 's/([^,\n\“]*)@([^,\n\“]*)/\1_X_\2@newdomain.com/' Test.csv
дает выходной файл (используя od -c чтобы увидеть управляющие символы):
0000000   f   o   o   _   X   _   e   x   a   m   p   l   e   .   c   o
0000020   m  \r   @   n   e   w   d   o   m   a   i   n   .   c   o   m
0000040  \n
Если вы добавите \r к исключенным символам:
sed -i .bak -E 's/([^,\r\n\“]*)@([^,\r\n\“]*)/\1_X_\2@newdomain.com/' Test.csv
затем сохраняется исходная последовательность новой строки:
0000000   f   o   o   _   X   _   e   x   a   m   p   l   e   .   c   o
0000020   m   @   n   e   w   d   o   m   a   i   n   .   c   o   m  \r
0000040  \n
Обратите внимание, что вам не нужно \r или \n в первом соответствующем поле, так как эта форма команды sed будет соответствовать только в пределах одной строки, а не через новые строки.