使用 sed 命令替换数字之间的 ,

使用 sed 命令替换数字之间的 ,

我有一个 CSV 文件,其中的数据格式如下

|001|,|abc,def|,123456,789,|aaa|,|bbb|,444,555,666

我只想用其他字符(例如 SOH 或 $ 或 *)替换数字之间的“,”

行中出现的其他“,”不应被替换,即我希望有以下输出

|001|,|abc,def|,123456*789,|aaa|,|bbb|,444*555*666

有人能帮我用 sed 命令模式来得到上面想要的输出吗

答案1

尝试这个

sed 's/\([0-9]\),\(-\?[0-9]\)/\1\*\2/g'

第一部分匹配一个数字,后跟一个逗号,再后跟一个数字或一个 -。下一部分简单地重复第一个数字、替换字符,然后是最后一个数字。

这将捕获任何模式,如“#,#”或“#,-#”,包括一些可能不需要的模式(例如“abc123,-def”-->“abc123*-def”)。修复此问题需要更多有关输入流的知识。(有关详细信息,请参阅注释。)

答案2

以下似乎有效:

sed 's/\([0-9]\),\([-0-9]\)/\1\*\2/g'

相关内容