![使用 sed 命令替换数字之间的 ,](https://linux22.com/image/1259657/%E4%BD%BF%E7%94%A8%20sed%20%E5%91%BD%E4%BB%A4%E6%9B%BF%E6%8D%A2%E6%95%B0%E5%AD%97%E4%B9%8B%E9%97%B4%E7%9A%84%20%2C.png)
我有一个 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'