在sed脚本中使用正则表达式的问题

时间:2012-12-10 13:00:04

标签: regex bash sed

我正面临一个有问题的正则表达式,我在一个小的sed脚本(bash)中使用它, 这是:

cities="new york;milan;rome;paris;london"
 echo ${cities} | sed 's/new.*;//'

这打印:伦敦
基本上,脚本替换所有内容直到最后一个分号出现,而我想要的是简单地删除与(new。*)匹配的什么,直到第一次出现分号 有什么建议吗?

1 个答案:

答案 0 :(得分:1)

你需要进行非贪婪的替换:

sed 's/new[^;]*;//'

如果您的数据字符串不以分号结尾,则不起作用。在这种情况下,你可以这样做:

sed 's/new[^;]*//g; s/;;/;/g; s/^;|;$//g'

修改

如评论中Ed所述,第二种解决方案不保留空字段。如果需要,这是有效的(据我测试过):

sed 's/;?new[^;]*$|new[^;]*;//g'