仅从 CSV 的第二个字段中删除“:”,并忽略其他字段



我一直在尝试清理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 将 : 替换为类似空格的 so:

sed i "s/:/ /g" file.csv
这适用于删除冒号,

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

使用 awk 你可以做

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

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

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

1只是打印线条。

你可以像这样使用 gnu sed:

sed -r 's/^([^,]*,[^,]*):/1 /g' file.csv

解释

  • ^将表达式锚定在每行的开头
  • 现在[^,]*,匹配第一个字段,包括分隔符
  • 然后从第二个字段到: [^,]*:匹配项
  • 括号^(...):注意将第二个字段中的:之前(不包括)的所有内容捕获到1
  • 最后用1替换(1后有一个空格将:替换为正则表达式匹配的在线空间

相关内容

  • 没有找到相关文章

最新更新