我需要替换CSV文件中的一个特定字符,如逗号。
我有文本和数字由'分隔的文件;“(csv为法语...)
范例:
value;x;y;comment;
abc;123,45;987,65;abc;
abc;123.45;987.65;abc;
abc;123,45;987,65;abc, blabla;
小数点分隔符有一个混合,既使用','又使用'.'。
我想用".“替换”,“,但只适用于十进制值,而不是像注解这样的文本。
我用regex试过sed
sed -i '/;[0-9]\+,[0-9]\+;/s/,/./g' file.csv
但那取代了所有的逗号。我不知道如何只替换我想要的东西。
我只想在bash中这样做。
3条答案
按热度按时间n9vozmp41#
一个使用扩展正则表达式和捕获组的
sed
想法:其中:
-E
-启用扩展正则表达式支持([0-9]),([0-9])
-匹配单个数字+,
+单个数字([0-9])
-定义一个捕获组(本例中有2个捕获组)\1.\2
-打印捕获组#1 +.
+捕获组#2这产生:
-i
标志,使sed
执行文件的就地更新;3,2,4 five 6,7 eight ;
(这可以解决,但需要更复杂的正则表达式)bvjveswy2#
您可以使用更简单的
sed
:详细信息:
([0-9]),([0-9])
:匹配一个数字,后跟一个逗号,再后跟一个数字。在捕获组#1和#2中捕获前后数字\1.\2
:替换为反向引用#1,然后是点,然后是反向引用#2或者,您可以使用这个更强大的
awk
解决方案:lh80um4z3#
您可以尝试:
注意:如果您使用
-i
选项,请不要忘记备份原始数据,以防万一。