Remplacer \ n dans un fichier csv

J’ai un fichier csv provenant d’une exportation mysql avec un contenu utilisateur. Si un utilisateur entre un retour, je ne peux pas importer le csv correctement dans un autre système. Je dois donc remplacer le \n . Ce ne serait pas un problème, mais à la fin de la ligne, il y a aussi un \n que je ne remplacerai pas.

Voici un exemple:

  john;doe;false;this \n is \na \n comment;\n james;bond;true;;\n 

Alors, comment puis-je remplacer tous les \n dans la colonne de commentaire du fichier csv? Je sais que je pourrais éditer la dernière nouvelle ligne car elle est toujours après un point-virgule et remplacer tous les autres retours par tr -d '\n' < file.csv , mais y a-t-il une manière plus intelligente?

Merci pour toute aide!


edit: sortie du cat

 \ohn;doe;false;This \s \ comment; james;bond;true;No returns in this comment; 

Si j’ouvre le fichier dans notepad ++ ou d’autres éditeurs, le premier caractère après la barre oblique inverse est visible. Avec un éditeur hexadécimal, il me montre un 0D0A .

  sed "s/\\\n$//g" mycsvfile mycsvfile means the file name of the csv file 

Essayez la commande awk suivante:

 awk 'BEGIN{RS=";\n";FS=";";OFS=";";ORS=";\n"}{gsub("\n","",$4);print}' file 

Sortie:

 $ cat file john;doe;false;this is a comment; james;bond;true;; $ awk 'BEGIN{RS=";\n";FS=";";OFS=";";ORS=";\n"}{gsub("\n","",$4);print}' file john;doe;false;this is a comment; james;bond;true;; 

Cela devrait fonctionner:

  perl -pe 's/(?<\!;)\n//g' file.csv 

Maintenant, j’ai trouvé une solution. Je supprime toutes les newlines inutiles directement dans mon mysql export script . Je pense que c’est le moyen le plus simple et le plus rapide de le faire.