Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我遇到了一个有趣的正则表达式问题,我在一个小的 sed 脚本(bash)中使用它,这里是:
cities="new york;milan;rome;paris;london" echo ${cities} | sed 's/new.*;//'
这将打印: London 基本上脚本会替换所有内容,直到最后一个分号出现,而我想要的是简单地删除匹配的内容(新。*)直到第一次出现分号 有什么建议吗?
你需要做一个非贪婪的替换:
sed 's/new[^;]*;//'
如果您的数据字符串不以分号结尾,这将不起作用。在这种情况下,您可以执行以下操作:
sed 's/new[^;]*//g; s/;;/;/g; s/^;|;$//g'
正如 Ed 在评论中所指出的,第二种解决方案不保留空字段。如果需要这样做(据我测试过):
sed 's/;?new[^;]*$|new[^;]*;//g'