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.