regex - 仅从 CSV 的第二个字段中删除 ":"并忽略其他字段

标签 regex linux bash csv sed

我一直在尝试清理包含类似于以下数据的 csv 文件中的数据:

8979880, Number One : Exclusive Mix, 387387, http://www.smashhits.com
4844404, Top 40 : 1988, 3893938, http://www.best80s.com
48094940, Highlander:The Return, 489494, http://www.instantaccess.com 

我的目标是用空格替换字段 2 中的冒号。最初我使用 sed 将 : 替换为类似空格的所以:

sed i "s/:/ /g" file.csv

这有助于删除冒号,但不幸的是,这也会删除 url 中的冒号,这不是我想要的。如何指定我只希望命令影响字段 2 中的数据?

最佳答案

使用awk你可以做到

awk '/:/{sub(/:/, " ")} 1' file.csv

使用 /:/ 匹配第一次出现的 :

使用 {sub(/:/, "")} 将 : 替换为空格

1 只是打印该行。

关于regex - 仅从 CSV 的第二个字段中删除 ":"并忽略其他字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37364455/

相关文章:

linux - sed 读取没有换行的单行

bash - 令人困惑的 Shell 引用

php regex preg_match - 在第一个定界符后停止

regex - 通过精确单词匹配过滤 pandas 数据框

linux - DMA和内存映射IO有什么区别?

regex - 在Linux命令行上通过Regex获取一部分主机名

bash - 如何查找和替换,跳过包含特定字符的行?

linux - 无法启动可以在另一台机器上执行的docker容器

javascript - 如何在 JavaScript 中将模式与数组进行匹配?

php - 正则表达式从iframe中提取字符串中的youtube嵌入网址