免费注册 查看新帖 |

Chinaunix

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

sed 这句话什么意思请帮我解释一下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-27 11:29 |只看该作者 |倒序浏览
从论坛中看到这么一个语句主要用于+86-010-12312312/45645666
+86022-56756756/56567675/56767656/56767656
替换成
+86-010-12312312/+86-010-45645666
+86-022-56756756/+86-022-56567675/+86-022-56767656/+86-022-56767656
用的语句是sed -r 's/(\+..)([^-])/\1-\2/;:a;s#(.*-)(.*/)([^+]+)#\1\2\1\3#;ta' 前半部分's/(\+..)([^-])/\1-\2/能够理解,但是后面 后面的语句好多的参数没有用过请哪位大侠帮我解释一下
问题1 :a这个参数的作用是什么
问题2  后面的#号是做什么的 我看前面没有这个东西啊。(也许是我对:a不理解的原因吧)
问题3  ta这个参数是什么意思呢??以前没有听说过。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
2 [报告]
发表于 2008-10-27 11:37 |只看该作者

回复 #1 zhubowen_636 的帖子

a是标签名,label
#是RE分隔符,相当于/
ta 是t命令,a是前面定义的标签。

论坛徽章:
0
3 [报告]
发表于 2008-10-27 11:37 |只看该作者
:a是一个标识.
ta表示s#...这个匹配成功的话就跳转到:a后面,如此循环直到s#不匹配

如果是ba的话,就表示无条件跳转了。(ba,还是fa?忘记了)

论坛徽章:
0
4 [报告]
发表于 2008-10-27 13:27 |只看该作者
想问一下这个地方为什么必须用#号才可以执行成功,用/就会出现语法错误呢???什么时候用#而不用/我觉得很奇怪
[root@localhost ~]# sed -r 's/(\+..)([^-])/\1-\2/;:a;s#(.*-)(.*/)([^+]+)#\1\2\1\3/;ta' test1
sed: -e expression #1, char 57: unterminated `s' command

sed -r 's/(\+..)([^-])/\1-\2/;:a;s#(.*-)(.*/)([^+]+)#\1\2\1\3#;ta' test1
+86-010-12312312/+86-010-45645666
+86-022-56756756/+86-022-56567675/+86-022-56767656/+86-022-56767656

论坛徽章:
1
处女座
日期:2014-12-23 17:59:27
5 [报告]
发表于 2008-10-27 13:38 |只看该作者
原帖由 zhubowen_636 于 2008-10-27 13:27 发表
想问一下这个地方为什么必须用#号才可以执行成功,用/就会出现语法错误呢???什么时候用#而不用/我觉得很奇怪
[root@localhost ~]# sed -r 's/(\+..)([^-])/\1-\2/;:a;s#(.*-)(.*/)([^+]+)#\1\2\1\3/;ta' te ...

避免岐义的意思.
有双重解释意思的时候, sed 怎么知道用哪个?
不是你认为它应该这样, sed就会这样.

自己想想.

论坛徽章:
0
6 [报告]
发表于 2008-10-27 13:39 |只看该作者
原帖由 zhubowen_636 于 2008-10-27 13:27 发表
想问一下这个地方为什么必须用#号才可以执行成功,用/就会出现语法错误呢???什么时候用#而不用/我觉得很奇怪
[root@localhost ~]# sed -r 's/(\+..)([^-])/\1-\2/;:a;s#(.*-)(.*/)([^+]+)#\1\2\1\3/;ta' te ...


因为你替换的内容里有/,sed分不清你的/是要替换的内容还是分隔符

论坛徽章:
0
7 [报告]
发表于 2008-10-27 13:55 |只看该作者
原帖由 leetaedong 于 2008-10-27 13:38 发表

避免岐义的意思.
有双重解释意思的时候, sed 怎么知道用哪个?
不是你认为它应该这样, sed就会这样.

自己想想.

谢谢!!!!我明白了.

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
8 [报告]
发表于 2008-10-27 13:55 |只看该作者
原帖由 zhubowen_636 于 2008-10-27 13:27 发表
想问一下这个地方为什么必须用#号才可以执行成功,用/就会出现语法错误呢???什么时候用#而不用/我觉得很奇怪
[root@localhost ~]# sed -r 's/(\+..)([^-])/\1-\2/;:a;s#(.*-)(.*/)([^+]+)#\1\2\1\3/;ta' te ...

不是只能用/,可以用其他字符,s#old#new# 或者sAoldAnewA(s后面的第一个字符做分隔符)。 用#可以省去对内容中的/转义

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
9 [报告]
发表于 2008-10-27 13:56 |只看该作者

回复 #7 zhubowen_636 的帖子

被楼主抢先了

论坛徽章:
0
10 [报告]
发表于 2008-10-27 18:02 |只看该作者
啊,原来是我提的问题,小弟学艺不精,后来看了半天书终于看懂了,cu的达人们太强了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP