我正在尝试修改一个坏.csv
文件,其中最后一列由于多余的字符而被拆分成不同数量的列,
。我想使用sed
保留前 4 个逗号,并用替换其余部分;
。以下操作似乎在 OS X 上不起作用:
sed 's/,/;/4g' file
在 OS X 中还有什么其他选择吗?
答案1
我没有 OSX 机器可以测试,但是可以尝试这个:
sed -E '
s/^([^,]*),([^,]*),([^,]*),(.*)/\1\x1f\2\x1f\3\x1f\4/
s/,/;/g
s/\x1f/,/g
' file
将前 3 个逗号转换为 ASCII“单位分隔符”控制字符,将其余所有逗号转换为分号,然后将控制字符转换回逗号。
演示:
$ echo "a,b,c,d,e,f" | sed -E 's/^([^,]*),([^,]*),([^,]*),(.*)/\1\x1f\2\x1f\3\x1f\4/; s/,/;/g; s/\x1f/,/g'
a,b,c,d;e;f