web-dev-qa-db-fra.com

Comment remplacer l'espace par une virgule avec sed?

Je voudrais remplacer l'espace vide entre chaque champ par un séparateur de virgule. Quelqu'un pourrait-il me faire savoir comment puis-je faire cela? J'ai essayé la commande ci-dessous, mais cela ne fonctionne pas. Merci.

My command:
:%s//,/


53 51097 310780 1
56 260 1925 1
68 51282 278770 1
77 46903 281485 1
82 475 2600 1
84 433 3395 1
96 212 1545 1
163 373819 1006375 1
204 36917 117195 1
16
Teja

Si vous parlez de sed, cela fonctionne:

sed -e "s/ /,/g" < a.txt

Dans vim, utilisez la même expression régulière pour remplacer:

s/ /,/g
31
mvp

Dans vim, vous souhaitez taper en mode normal (commande):

:%s/ /,/g

Sur l'invite du terminal, vous pouvez utiliser sed pour effectuer ceci sur un fichier:

sed -i 's/\ /,/g' input_file

Remarque: l'option -i de sed signifie "édition sur place", car elle modifiera le fichier d'entrée.

8
sampson-chen

Je sais que ce n'est pas exactement ce que vous demandez, mais pour remplacer une virgule par une nouvelle ligne, cela fonctionne très bien

tr , '\n' < file
2
determinacy

Si vous voulez la sortie sur le terminal alors, 

$sed 's/ /,/g' filename.txt

Mais si vous souhaitez modifier le fichier lui-même i.e. si vous souhaitez remplacer l’espace par la virgule dans le fichier, 

$sed -i 's/ /,/g' filename.txt
1
Kumar Gaurav

Essayez la commande suivante et cela devrait marcher pour vous.

sed "s/\s/,/g" orignalFive.csv > editedFinal.csv

SI vos données incluent une séquence arbitraire de caractères vides (tabulation, espace) et que vous souhaitez remplacer chaque séquence par une virgule, utilisez les éléments suivants:

sed 's/[\t ]+/,/g' input_file

ou 

sed -r 's/[[:blank:]]+/,/g' input_file

Si vous souhaitez remplacer une séquence de caractères d'espace, qui inclut d'autres caractères tels que le retour chariot et le retour arrière, etc., utilisez ce qui suit:

sed -r 's/[[:space:]]+/,/g' input_file
0
H.Alzy