如何在 OS X 中使用 sed 替换特定数字后的所有出现次数

如何在 OS X 中使用 sed 替换特定数字后的所有出现次数

我正在尝试修改一个坏.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

相关内容