我正在尝试使用sed来清理URL行,以便仅提取域。
所以出自:
http://www.suepearson.co.uk/product/174/71/3816/
我想要:
http://www.suepearson.co.uk/
(无论是否使用尾部斜杠,都无关紧要)
我试过了:
sed 's|\(http:\/\/.*?\/\).*|\1|'
and (转义非贪婪量词)
sed 's|\(http:\/\/.*\?\/\).*|\1|'
但是我似乎不能让非贪婪量词(
?
)工作,所以它总是匹配整个字符串。
发布于 2009-07-09 10:58:23
基本的和扩展的Posix/GNU正则表达式都不能识别非贪婪量词;您需要一个新的正则表达式。幸运的是,这种上下文的Perl正则表达式非常容易获得:
perl -pe 's|(http://.*?/).*|\1|'
发布于 2009-07-09 10:51:35
在这种特定情况下,您可以在不使用非贪婪正则表达式的情况下完成工作。
尝试这个非贪婪的正则表达式
[^/]*
而不是
.*?
sed 's|\(http://[^/]*/\).*|\1|g'
发布于 2009-07-09 11:08:45
sed不支持“非贪婪”运算符。
您必须使用"[]“运算符从匹配中排除"/”。
sed 's,\(http://[^/]*\)/.*,\1,'
附注:不需要反斜杠"/“。
https://stackoverflow.com/questions/1103149
复制相似问题
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287