首页 > 解决方案 > 使用 sed 将元素替换为另一个元素,但仅在某个条件下

问题描述

我有一个包含以下形式的行的文件:

产品、品牌、成本、评论、位置、评级

我想将分隔的“,”更改为新字符“;”

我尝试使用 sed 命令,例如 `sed 's/,/;/g' prod.txt 但它也会更改数据中的逗号(“评论”、“品牌”和其他列)!

我可以使用 csvkit,但它会帮助我使用更通用的基本工具,如 sed、tr、grep、cut 等,因为稍后我将不得不概括这个问题,而 csvkit 不会有用

请注意,我的数据是字符串,每个值都封装在引号之间“。这可能有助于隔离需要更改的逗号

我在这方面很糟糕,非常感谢您的帮助

最好的,

标签: shellunix

解决方案


如果您必须使用sed,那么这个适用于您的示例数据但可能不适用于现实生活数据的脆弱解决方案可能会有所帮助。?。

$ sed 's/,/|/;s/,/|/;s/,/|/;s/\(.*"\).\([^,]*\).\(.*\)/\1|\2|\3/' input_file
Computer| "Apple"| 500| "Can be fixed"| Berlin| 5

Computer| "Apple"| 670| "Can be fixed, need new screen"| Berlin| 3

Phone| "Samsung"| 670|"Touch is dead, Screen is dead"| Berlin| 1

TV| "Samsung"| 670|"Antenna dead, light issues"| Frankfurt| 2

推荐阅读