我一直在尝试清理包含与此类似的数据的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来替换:with spacelike so:
sed i "s/:/ /g" file.csv
这可以删除冒号,但不幸的是,这也删除了网址中的冒号,这不是我想要的。如何指定我只希望命令影响字段2中的数据?
答案 0 :(得分:3)
使用awk你可以做到
awk '/:/{sub(/:/, " ")} 1' file.csv
使用/:/
匹配第一次出现:
使用{sub(/:/, " ")}
替换:使用空格
1
只需打印该行。
答案 1 :(得分:2)
您可以像这样使用gnu sed:
sed -r 's/^([^,]*,[^,]*):/\1 /g' file.csv
<强>解释强>
^
将表达式锚定在每行的开头[^,]*,
匹配第一个字段,包括分隔符[^,]*:
匹配从第二个字段到:
^(...):
注意将第二个字段中的:
所有内容都包含在\1
\1
(\1
替换:
之后有一个空格,其中正则表达式与正则表达式匹配