SED 脚本中的正则表达式问题



我在正则表达式中遇到了一个有趣的问题,我正在一个小的 sed 脚本 (bash) 中使用它,在这里:

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

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

你需要做一个非贪婪的替换:

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

如果数据字符串不以分号结尾,则此方法不起作用。在这种情况下,您可以执行以下操作:

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

编辑

正如 Ed 在评论中指出的那样,第二种解决方案不保留空字段。如果需要,这可以工作(据我测试过):

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

相关内容

  • 没有找到相关文章