+ -
当前位置:首页 → 问答吧 → 文本替换问题

文本替换问题

时间:2011-05-05

来源:互联网

本帖最后由 ttxy624 于 2011-05-05 13:33 编辑

某文件有如下行,每一行是一个单独的域名
baidu.com
www.baidu.cn
www.baidu.com
www.baidu.com.cn
www1.www.baidu.com

现在需要将一级域名提出来,如上面提出来是

baidu.com
baidu.cn
baidu.com.cn

这样的,由于有.com.cn和.cn 的域名,所以边界字符不好定义,不知道用sed和awk怎么实现?

.com.cn和.cn只是举例,还有.com.tw,.com.hk,.net.cn等之类的,所以不对只针对上面两种来处理

作者: ttxy624   发布时间: 2011-05-05

似乎比想象的要麻烦呢。
如果只处理cn  com   com.cn  的话,不用管org什么的,用这个就可以
  1. [root@bill ~]# echo "baidu.com
  2. www.baidu.cn
  3. www.baidu.com   
  4. www.baidu.com.cn
  5. www1.www.baidu.com"|sed 's/.*\.\([^(com)(cn)\.]*\.[(com)(cn)]\)/\1/'|sort|uniq
  6. baidu.cn
  7. baidu.com
  8. baidu.com.cn
复制代码

作者: dzhxc   发布时间: 2011-05-05

回复 ttxy624
  1.     awk  -vRS='www.' '/com|cn/&&!a[$1]++' file
复制代码

作者: yinyuemi   发布时间: 2011-05-05

echo "baidu.com
www.baidu.cn
www.baidu.com
www.baidu.com.cn
www1.www.baidu.com
www.com.baidu.cn
com.baidu.cn"|grep -oP '[^.]+(\.(com|cn|org|net|cc))+$'

还要 去重 添加顶级域名

作者: ziyunfei   发布时间: 2011-05-05

这个的确是有点麻烦了,我觉得需要列个表,然后从后到前一段段查下去.

作者: cjaizss   发布时间: 2011-05-05

本帖最后由 ywlscpl 于 2011-05-05 13:39 编辑
  1. awk -F. 'NF>2&&$(NF-1)=="com"{printf $(NF-2)"."}{print $(NF-1)"."$NF}' file
复制代码
再去下重吧

作者: ywlscpl   发布时间: 2011-05-05

回复 ziyunfei


    能帮忙解释一下具体的匹配过程吗?因为我用下面的sed替换是有问题的

sed  -r 's/([^\.]+\.)*([^\.]+)\.(com|cn|net|org|hk|tw|cc|me|tv)(.*)$/\2.\3\4/'

这样在有.com.cn的情况下,\2会匹配到.com,\3会匹配到.cn,\4就匹配到空了,就样最后的结果就是.com.cn了。

用 grep -oP '[^.]+(\.(com|cn|org|net|cc))+$' 就不会有问题

不知道具体对于www.baidu.com.cn和www.biadu.com.tw是怎么匹配的,谢谢。

作者: ttxy624   发布时间: 2011-05-05



QUOTE:
某文件有如下行,每一行是一个单独的域名
baidu.com



www1.

现在需要将一级域名提出来,如上面提 ...
ttxy624 发表于 2011-05-05 11:12




$ echo 'baidu.com
www.baidu.cn
www.baidu.com
www.baidu.com.cn
www1.www.baidu.com' | sed -re 's/www[^.]?\.//g' -e 's/\s+$//' | sort -u
baidu.cn
baidu.com
baidu.com.cn

作者: jason680   发布时间: 2011-05-05

回复 ttxy624


    another way:
  1. echo 'baidu.com
  2. www.baidu.cn
  3. www.baidu.com
  4. www.baidu.com.cn
  5. www1.www.baidu.com' |awk '{gsub(/www[^\.]*./,"\n");NF+=0}!a[$0]++'
  6. baidu.com
  7. baidu.cn
  8. baidu.com.cn
复制代码

作者: yinyuemi   发布时间: 2011-05-05