将 csv 文件中的逗号替换为用于 mongoimport 的 sed

Replacing commas in a csv file with sed for mongoimport

我有一个 csv 文件,我需要用点替换所有逗号。换句话说,我只需要分号作为分隔符,而逗号需要用点代替。 我需要这个以便使用 mongoimport 导入数据。 我使用了 sed 命令,但它并没有替换所有出现的逗号。例如:

Zolmitriptan;6 UNITA' 2,5 MG - USO ORALE;N02CC03;33345149;ZOMIG RAPIMELT;"""2,5 MG COMPRESSE ORODISPERSIBILI"" 6 COMPRESSE IN BLISTER";ASTRAZENECA S.P.A.;17,84;20,84;;3,00;FUB

变成这样,sed 's/\,/\./' <filename>

Zolmitriptan;6 UNITA' 2.5 MG - USO ORALE;N02CC03;33345149;ZOMIG RAPIMELT;"""2,5 MG COMPRESSE ORODISPERSIBILI"" 6 COMPRESSE IN BLISTER";ASTRAZENECA S.P.A.;17,84;20,84;;3,00;FUB

请注意,只有第一个逗号被替换了。我做错了什么?

PS。有没有办法让 mongoimport 忽略逗号? (在这种情况下我不需要更换)

我没有使用全局选项,所以

sed 's/\,/\./g'

正在工作。 不过,对于 mongoimport 替代方案,问题仍然悬而未决!

这是一个有效的 "sed" 命令行。 它以一个文件作为输入,并将数字 (0-9) 后面的任何 替换为点 .

sed -i 's/\([0-9]\),/./g' your_file.csv

评论:

  • -i 代表 "inplace" :文件本身被处理。小心,没有备份!
  • sed -i 's/blabla/foofoo/g' 会将出现的任何 blabla 替换为 foofoo。最后一个 g 选项表示如果多次找到 blabla,则在每一行中替换多次。
  • [0-9]表示0到9的任意数字。
  • ([0-9]) 括号用来存放逗号前的数字。必须转义括号。
  • \1 用于调用存储的内容并将其返回到点之前的结果中。也必须转义。

示例:

your_file.csv之前

stuff 12,004 hello -78,1
anything456,78 what else 98765

运行 下一行

sed -i 's/\([0-9]\),/./g' your_file.csv

your_file.csv 在

之后
stuff 12.004 hello -78.1
anything456.78 what else 98765