免费注册 查看新帖 |

Chinaunix

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

[桌面系统] linux的 sed命令 [复制链接]

论坛徽章:
7
处女座
日期:2014-08-23 21:10:59程序设计版块每日发帖之星
日期:2015-06-15 22:20:00程序设计版块每日发帖之星
日期:2015-06-20 22:20:00程序设计版块每日发帖之星
日期:2015-07-05 22:20:00每日论坛发贴之星
日期:2015-07-05 22:20:00操作系统版块每日发帖之星
日期:2015-07-13 23:17:46程序设计版块每日发帖之星
日期:2015-12-16 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-04-06 20:33 |只看该作者 |倒序浏览
[root@localhost ~]$ file=xyz
[root@localhost ~]$ lastchar=$(echo $file |sed 's/.$/u9/')
[root@localhost ~]$ echo $lastchar
xyu9
[root@localhost ~]$ lastchar=$(echo $file |sed 's/.$\(.\)/u9/')
[root@localhost ~]$ echo $lastchar
xyz
[root@localhost ~]$ ^C
[root@localhost ~]$


\(.\)为什么放在shell中,会导致不同的结果出现?

论坛徽章:
0
2 [报告]
发表于 2015-04-06 22:01 |只看该作者
我不是很懂哈,“\(.\)”这是要匹配什么

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
3 [报告]
发表于 2015-04-07 09:42 |只看该作者
你这个的意思是说,结束后还有一个字符,所以根本也就没有匹配上,所以也就没有替换成功

论坛徽章:
7
处女座
日期:2014-08-23 21:10:59程序设计版块每日发帖之星
日期:2015-06-15 22:20:00程序设计版块每日发帖之星
日期:2015-06-20 22:20:00程序设计版块每日发帖之星
日期:2015-07-05 22:20:00每日论坛发贴之星
日期:2015-07-05 22:20:00操作系统版块每日发帖之星
日期:2015-07-13 23:17:46程序设计版块每日发帖之星
日期:2015-12-16 06:20:00
4 [报告]
发表于 2015-04-07 17:16 |只看该作者
zsszss0000 发表于 2015-04-07 09:42
你这个的意思是说,结束后还有一个字符,所以根本也就没有匹配上,所以也就没有替换成功


多谢,顺便问一下,如何结贴?

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
5 [报告]
发表于 2015-04-07 17:57 |只看该作者
修改一下你的题目就好了啊

论坛徽章:
7
处女座
日期:2014-08-23 21:10:59程序设计版块每日发帖之星
日期:2015-06-15 22:20:00程序设计版块每日发帖之星
日期:2015-06-20 22:20:00程序设计版块每日发帖之星
日期:2015-07-05 22:20:00每日论坛发贴之星
日期:2015-07-05 22:20:00操作系统版块每日发帖之星
日期:2015-07-13 23:17:46程序设计版块每日发帖之星
日期:2015-12-16 06:20:00
6 [报告]
发表于 2015-04-08 09:13 |只看该作者
本帖最后由 chouxiaoya8100 于 2015-04-08 09:52 编辑

删除本楼, 发现本楼的回复是错误的。
   

论坛徽章:
7
处女座
日期:2014-08-23 21:10:59程序设计版块每日发帖之星
日期:2015-06-15 22:20:00程序设计版块每日发帖之星
日期:2015-06-20 22:20:00程序设计版块每日发帖之星
日期:2015-07-05 22:20:00每日论坛发贴之星
日期:2015-07-05 22:20:00操作系统版块每日发帖之星
日期:2015-07-13 23:17:46程序设计版块每日发帖之星
日期:2015-12-16 06:20:00
7 [报告]
发表于 2015-04-08 09:58 |只看该作者
回复 4# chouxiaoya8100

进一步验证你的逻辑:

lastchar=abcd

(1)
echo $lastchar | sed 's/...\(.\)$/\1/'

结果: d

说明你的逻辑对。

(2)echo $lastchar | sed 's/...\($.\)/\1/'

结果是错误的。

(3)echo $lastchar | sed 's/...\(.$\)/\1/'

结果:d

(4)echo $lastchar | sed 's/...\(.\)/\1/'

结果:d

结论:$仅仅是一个指针!!而 \(.\)和普通的.没啥区别,要说有区别,就是多了一个临时缓冲区的作用。

为了进一步验证这个结论,我再提供一个例子:

echo $lastchar | sed 's/\(.\).*/\1/'

结果:a , 再次证明你的答案是对的。






   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP