Comment supprimer un ensemble de virgules de fin dans bash:
a,b,c,d,,,,
1,2,3,,,,
Sortie désirée:
a,b,c,d
1,2,3
J'ai essayé de faire ceci:
grep "5628" test.csv | sed 's/,*$//g'
mais ça ne marche pas. Le fichier provenait à l'origine d'une machine Windows.
sed
vous plaît (le que vous avez montré sans nom de fichier agit comme un filtre et ne traite pas un fichier en place )dos2unix
ou quelque chose comme ça .Réponses:
Concernant la commande que vous avez fournie:
Cela produira des lignes correspondant à '5628' avec toutes les virgules de fin supprimées. Il ne mettra pas à jour le fichier
test.csv
.Cependant, vous avez indiqué que le fichier provenait d'une machine Windows, donc les fins de ligne sont CR / NL au lieu de simplement NL. Le résultat est qu'il y a un CR caché à la fin de la ligne, et vous avez besoin d'une ligne de commande à la place:
En fait, vous pouvez simplement faire ceci avec une seule commande:
la source
\r*
permet zéro ou plusieurs caractères CR (il continuera donc à fonctionner avec les fichiers dérivés Unix / Linux). Je préférerais utiliser\r?
pour indiquer un seul CR facultatif mais je ne me souvenais pas du drapeau poursed
lui dire d'utiliser les ERE sur le dessus de ma tête. Je pense que ce n'est-r
pas testé ici. Le,*
est le vôtre et correspond à zéro ou plusieurs virgules.g
n'est pas nécessaire dans ce cas, ter est seulement 1 extrémité spécifiée par$
(pas l'OP qui ne demande qu'à supprimer le coma de fuite) cela évite un processus de tuyauterie, sed prenant directement le filtre et la conversion
la source