免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4732 | 回复: 15
打印 上一主题 下一主题

文本替换问题 [复制链接]

论坛徽章:
1
寅虎
日期:2013-08-22 20:18:39
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-05 11:12 |只看该作者 |倒序浏览
本帖最后由 ttxy624 于 2011-05-05 14:14 编辑

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

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

baidu.com
baidu.cn
baidu.com.cn

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

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

论坛徽章:
0
2 [报告]
发表于 2011-05-05 11:53 |只看该作者
似乎比想象的要麻烦呢。
如果只处理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
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
3 [报告]
发表于 2011-05-05 12:04 |只看该作者
回复 1# ttxy624
  1.     awk  -vRS='www.' '/com|cn/&&!a[$1]++' file
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
4 [报告]
发表于 2011-05-05 12:17 |只看该作者
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))+$'

还要 去重 添加顶级域名

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
5 [报告]
发表于 2011-05-05 12:22 |只看该作者
这个的确是有点麻烦了,我觉得需要列个表,然后从后到前一段段查下去.

论坛徽章:
0
6 [报告]
发表于 2011-05-05 13:27 |只看该作者
本帖最后由 ywlscpl 于 2011-05-05 13:39 编辑
  1. awk -F. 'NF>2&&$(NF-1)=="com"{printf $(NF-2)"."}{print $(NF-1)"."$NF}' file
复制代码
再去下重吧

论坛徽章:
1
寅虎
日期:2013-08-22 20:18:39
7 [报告]
发表于 2011-05-05 13:30 |只看该作者
回复 4# 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是怎么匹配的,谢谢。

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
8 [报告]
发表于 2011-05-05 13:48 |只看该作者
某文件有如下行,每一行是一个单独的域名
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

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
9 [报告]
发表于 2011-05-05 13:58 |只看该作者
回复 1# 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
复制代码

论坛徽章:
1
摩羯座
日期:2014-12-29 15:59:36
10 [报告]
发表于 2011-05-05 14:32 |只看该作者
回复  ziyunfei


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

sed  -r  ...
ttxy624 发表于 2011-05-05 13:30


[^.]+(\.(com|cn|org|net|cc|tw))+$

www.baidu.com.cn

www.biadu.com.tw
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP