Parece que o arquivo original test.csv é formatado no Windows, com retorno ( 0x0d ou \r ) e alimentação de linha ( 0x0a ou \n ) para cada nova linha. Seu padrão de pesquisa sed não exclui \r , portanto, isso será retido no segundo campo correspondente e será emitido antes do texto anexado.
Então, seu comando original:
sed -i .bak -E 's/([^,\n\“]*)@([^,\n\“]*)/[email protected]/' Test.csv
fornece o arquivo de saída (usando od -c para ver os caracteres de controle):
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
Se você adicionar \r aos caracteres excluídos:
sed -i .bak -E 's/([^,\r\n\“]*)@([^,\r\n\“]*)/[email protected]/' Test.csv
a sequência original de nova linha é mantida:
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
Observe que você não precisa de \r ou \n no primeiro campo correspondente, pois essa forma de comando sed corresponderá apenas a linhas únicas e não a novas linhas.