【发布时间】:2010-11-09 08:14:28
【问题描述】:
我正在尝试使用 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|'
但我似乎无法让非贪婪量词 (?) 工作,所以它总是匹配整个字符串。
【问题讨论】:
-
附注:如果用“|”分隔正则表达式,则无需转义“/”。事实上,大多数人用“|”分隔而不是“/”以避免“栅栏”。
-
@AttishOculus 在 sed 的替代表达式中,“s”之后的第一个字符是分隔符。因此 's^foo^bar^' 或 's!foo!bar!'也可以工作
-
对于扩展的正则表达式,使用
sed -E 's...。尽管如此,没有不情愿的运营商。 -
不回答问题标题,但在这种特定情况下,简单的
cut -d'/' -f1-3有效。
标签: regex sed pcre greedy regex-greedy