2012-07-29 61 views
2

我使用以下命令来提取包含.com扩展名并可能包含.us或任何国家/地区扩展名的不同URL。如何从Linux中的文件中提取字符串的不同部分

grep '\.com' source.txt -m 700 | uniq | sed -e 's/www.//' 
> dest.txt 

问题是,它提取了同一个doamin中的url,我不想要的东西。例如: abc.yahoo.com efg.yahoo.com

我只需要yahoo.com。我如何使用grep或任何其他命令仅提取不同的域名?

回答

0

也许这样?

egrep -io '[a-z0-9\-]+\.[a-z]{2,3}(\.[a-z]{2})?' source.txt 
+0

这不一定是我们的,该文件可能包含不同的扩展名如美国,英国等 – 2012-07-29 19:15:17

+0

@JuryA怎么样? – 2012-07-29 19:22:06

+0

是的。这服务于:egrep -io'[a-z0-9 \ - ] + \。com(\。[a-z] {2})?' source.txt -m 100 | uniq | sed -e's/www。//''> dest.txt除了一件事。为什么uniq不做它应该做的事?即如果我有abc.yahoo.com&efg.yahoo.com,新的dest文件包含yahoo.com的两个条目? – 2012-07-29 20:42:10

0

您是否尝试过使用awk代替sed并指定“。”作为分隔符,只打印出最后两个字段。

awk -F "." '{ print $(NF-1)"."$NF }' 
+0

这可能是。 com.us或.com.sa等将这服务? – 2012-07-29 19:57:46

+0

我试过了,没有帮助。例如,如果你有:abc.yahoo.com,它打印abc.yahoo – 2012-07-29 19:59:07

0

也许这样的事情应该有所帮助:

egrep -o '[^.]*.com' file 
+0

我认为这应该工作,除了一部分,它会给我第二个域扩展名,如.com.us或.com.uk ??我需要它。 – 2012-07-29 19:35:09

+0

我试过了。它可以很好地工作,但不会在多个扩展中使用,例如:.com.us,.com.sa。任何想法如何使它适用于这两种情况? – 2012-07-29 20:28:43

相关问题