【发布时间】:2016-06-10 04:03:17
【问题描述】:
我只想更改 CSV 上的分隔符。 该文件来自外部服务器,因此分隔符是这样的:^A.
name^Atype^Avalue^A
john^Ab^A500
mary^Ac^A400
jack^Ad^A200
我想得到这个:
name,type,value
john,b,500
mary,c,400
jack,d,200
我需要将其更改为逗号(,)或制表符(,),但我的 sed 命令尽管输出正确,但不写入文件。
cat -v CSVFILE | sed -i "s/\^A/,/g"
当我使用上面的行时,它会正确输出由逗号而不是 ^A 分隔的文件,但它不会写入文件。
我也试过这样:
sed -i "s/\^A/,/g" CSVFILE
也不行... 我做错了什么?
【问题讨论】:
-
第一个命令无法运行。您让 sed 对管道数据进行操作,没有 sed 可以就地查看和重写的文件。您的第二个命令似乎没问题。有错误信息吗?
-
请提供文件中的一些示例行。特别是
cat -v做了一些转换,可能会创建第二个示例中不存在的^A。 -
我相信
^A不在文件中。有一些不可打印的字符, cat -v 显示为^A。所以你可以这样做:`cat -v CSVFILE | sed "s/\^A/,/g" > CSVFILE.rpl`` 然后重命名 CSVFILE.rpl。 -
我相信你的
^A是字节表示为 1 的字符,使用 `sed -i 's/\x01/,/g" CSVFILE' -
在模式中插入 ^A 字符:Ctrl + V + A