免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3830 | 回复: 19

问一个关于替换的问题  关闭 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2004-03-25 10:19 |显示全部楼层
有如下文件a.txt

http://www.163.com//www.126.com/
http:/www.163.com//www.126.com/
http:www.163.com//www.126.com//www.144.com
http:www.163.com/www.126.com/www.144.com

想通过一个awk或者sed指令,将其变成:

www.163.com//www.126.com/
www.126.com/
www.126.com//www.144.com
http:www.163.com/www.126.com/www.144.com


即:将第一个//以前的字符删除,碰到多个//的情况,保留后面的//号,如果没有//则原文输出。

====================================
修改过!加了第4行。

论坛徽章:
0
发表于 2004-03-25 10:40 |显示全部楼层

问一个关于替换的问题

  1. awk -F"//" '{$1="";print}' a.txt|sed -e 's/^.//' -e 's/ /\/\//g'
复制代码

or
  1. awk -F"//" '{OFS="//"}{$1="";print}' a.txt|sed 's/^..//'
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2004-03-25 11:19 |显示全部楼层

问一个关于替换的问题

awk -F"//" '{$1="";print}' a.txt|sed -e 's/^.//' -e 's/ /\/\//g'
输出不正确:
www.163.com//www.126.com///
www.126.com///
www.126.com//www.144.com//
-------------------------------------------------------
awk -F"//" '{OFS="//"}{$1="";print}' a.txt|sed 's/^..//'
输出结果正确。

另:我想知道有没有可能用一个 正则表达式 替换来解决这个问题,而不用类似-F"//"的办法。-F"//"的方法使用起来比较受局限。

论坛徽章:
0
发表于 2004-03-25 12:56 |显示全部楼层

问一个关于替换的问题

关注...

论坛徽章:
0
发表于 2004-03-25 13:21 |显示全部楼层

问一个关于替换的问题

  1. $cat file|sed "s/\/\// /g"|cut -f2- -d" "|sed "s/ $//g;s/ /\/\//g"
  2. www.163.com//www.126.com/
  3. www.126.com/
  4. www.126.com//www.144.com
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2004-03-25 15:31 |显示全部楼层

问一个关于替换的问题

楼上mm的办法和awk -F"//"的办法核心是一样的,有没有只用一个正则表达式搞定的办法?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2004-03-25 16:13 |显示全部楼层

问一个关于替换的问题

以下两种方法都可以,就是想知道可否用一个正则表达式搞定:
1:
awk '{k=split($1,a,"//";if(k>1) {for(i=2;i<k;i++)printf "%s//",a;printf "%s\n",a}else print}'

2:
awk '{i=index($1,"//";if(i>0) print substr($1,i+2);else print}'

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2004-03-25 17:53 |显示全部楼层

问一个关于替换的问题

看来只用一个正则表达式是搞不定了。

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
发表于 2004-03-25 18:04 |显示全部楼层

问一个关于替换的问题


  1. $ cat testfile
  2. http:/www.163.com//www.126.com/
  3. /http:/www.163.com//www.126.com/
  4. //http:/www.163.com//www.126.com/
  5. http:/www.163.com//www.126.com//
  6. http:/www.163.com/www.126.com/
  7. $ sed -e "s:[^/]*\(/[^/]\{1,\}\)*//::" testfile
  8. www.126.com/
  9. www.126.com/
  10. http:/www.163.com//www.126.com/
  11. www.126.com//
  12. http:/www.163.com/www.126.com/
复制代码

论坛徽章:
0
发表于 2004-03-25 18:23 |显示全部楼层

问一个关于替换的问题

一条awk的就可以解决!

  1. $awk '{sub(/\/\//," ")}{if(NF==1)print $0;else for(i=2;i<=NF;i++)print $i}'
  2. www.163.com//www.126.com/
  3. www.126.com/
  4. www.126.com//www.144.com
  5. http:www.163.com/www.126.com/www.144.com
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP