所以我只想匹配来自以太的域:

http://www.google.com/test/
http://google.com/test/
http://google.net/test/

输出应该适用于所有 3:谷歌

我让这段代码只适用于 .com
echo "http://www.google.com/test/" | sed -n "s/.*www\.\(.*\)\.com.*$/\1/p"
Output: 'google'

然后我认为它会像 say (com|net) 一样简单,但这似乎不是真的:
echo "http://www.google.com/test/" | sed -n "s/.*www\.\(.*\)\.(com|net).*$/\1/p"
Output: '' (nothing)

我打算使用类似的方法来摆脱“www”,但似乎我做错了什么......(它是否不适用于\(\) 之外的正则表达式......)

最佳答案

这将在所有情况下输出“google”:

sed -n "s|http://\(.*\.\)*\(.*\)\..*|\2|p"

编辑:

这个版本将处理像 "' http://google.com.cn/test "和 "http://www.google.co.uk/ "这样的 URL 以及原始问题中的 URL:
sed -nr "s|http://(www\.)?([^.]*)\.(.*\.?)*|\2|p"

此版本将处理不包含“http://”(以及其他)的情况:
sed -nr "s|(http://)?(www\.)?([^.]*)\.(.*\.?)*|\3|p"

关于regex - 从 url (www.google.com=google) 匹配域名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2219418/

10-16 02:57
查看更多