[sed] 一道追加字符的sed题?
Passwd.txt的内容如下:
AC456
AC492169
AC9967
AC88345
要往Passwd.txt每行的末尾加入passwd,我知道命令如下:
cat Passwd.txt | sed 's/[0-9][0-9]*/& passwd/g'
结果如下:
AC456 Passwd
AC492169 Passwd
AC9967 Passwd
AC88345 Passwd
我的问题是:这里为什么要写两个[0-9],写一个[0-9]的效果如下:
PasswdA PasswdC456 Passwd
PasswdA PasswdC492169 Passwd
PasswdA PasswdC9967 Passwd
PasswdA PasswdC88345 Passwd
不理解?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
*是重复前面一个0到无数次
多写一个 保证至少有一个数字
回复 1# qiuzugen
用\+,不用*
本帖最后由 where27 于 2011-04-19 10:47 编辑
[0-9]* 任意个数字(0个或多个)
[0-9]+ 一个以上的数字
[0-9]? 0个或一个数字
不过?是扩展的正则表达式里才有的,sed里需要加上-r来支持扩展的正则
首先你这样并不能实现修改文本的目的
应该是:
sed -i 's/$/ passwd/g' passwd.txt
其中option: -i 表示可以修改文本的内容
sed 's/[0-9][0-9]\+/& passwd/g' Passwd.txt
回复 6# spanthrive
太谢谢了,我一直没有真正理解-i 这个参数,现在理解了~
这方法不错啊,不过要-r吧,这样+也不用转义了
我觉得-r是好习惯,一堆转义往往导致sed有的东西可读性太差,不过吓唬不懂unix的人倒是蛮不错,呵呵
一堆转义的东西,弄的很难读