在sed中使用非贪婪(不情愿的)正则表达式匹配?

10 浏览
0 Comments

在sed中使用非贪婪(不情愿的)正则表达式匹配?

我正在尝试使用sed来清理URL行,从中提取出域名。

所以,从:

http://www.suepearson.co.uk/product/174/71/3816/

我想要:

http://www.suepearson.co.uk/

(带或不带尾部斜杠,都无所谓)

我尝试了:

 sed 's|\(http:\/\/.*?\/\).*|\1|'

和(转义非贪婪量词)

sed 's|\(http:\/\/.*\?\/\).*|\1|'

但是我似乎无法让非贪婪量词(?)正常工作,所以它总是匹配整个字符串。

admin 更改状态以发布 2023年5月21日
0
0 Comments

\n\n在这种特殊情况下,您可以在不使用非贪婪正则表达式的情况下完成工作。\n尝试使用[^/]*而不是.*?的非贪婪正则表达式:\n

sed 's|\(http://[^/]*/\).*|\1|g'

0
0 Comments

基本的和扩展的Posix/GNU正则表达式都不能识别非贪婪量词;你需要更晚的正则表达式。幸运的是,Perl正则表达式在这个情况下相当容易得到:

perl -pe 's|(http://.*?/).*|\1|'

0