shell - 使用 sed 将元素替换为另一个元素,但仅在某个条件下
问题描述
我有一个包含以下形式的行的文件:
产品、品牌、成本、评论、位置、评级
我想将分隔的“,”更改为新字符“;”
我尝试使用 sed 命令,例如 `sed 's/,/;/g' prod.txt 但它也会更改数据中的逗号(“评论”、“品牌”和其他列)!
我可以使用 csvkit,但它会帮助我使用更通用的基本工具,如 sed、tr、grep、cut 等,因为稍后我将不得不概括这个问题,而 csvkit 不会有用
请注意,我的数据是字符串,每个值都封装在引号之间“。这可能有助于隔离需要更改的逗号
我在这方面很糟糕,非常感谢您的帮助
最好的,
解决方案
如果您必须使用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
推荐阅读
- c# - c#解析没有引用类的JSON?
- path - java.lang.IllegalArgumentException:URL 查询字符串不能有替换块
- azure-sphere - 高层和 RTapp 之间的沟通问题
- etl - 为什么在 Datastage 中加入结果会返回 0 条记录?
- bluetooth-lowenergy - 我正在寻找关于确定两个扫描仪之间的信标距离但距离为 15-25 米的文章
- excel - 为什么 Excel 公式中的 Isblank() 和 vba 中的 Isempty() 显示不同的值?
- reactjs - 反应中双花括号 { } 的技术名称是什么?
- ios - QLPreviewController第一次打开的tintColor不一样
- c# - 基于 C# 中的一个主列合并两个数据表
- amazon-web-services - 为无服务器 websocket 应用禁用 Cloudwatch 日志