免费注册 查看新帖 |

Chinaunix

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

给每行前面加 # 的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-05-18 16:49 |只看该作者 |倒序浏览
sed 's/.*/#&/' text.txt
sed 's/./#&/' text.txt
sed 's/^.*/#&/' text.txt
sed 's/^./#&/' text.txt
sed 's/^/#&/' text.txt
这些都行

其中 sed 's/./#&/' text.txt 是忽略空白行,这个我能明白
^/^./.*/^.*,这些都是匹配任何行,不管有没有数据,这样理解对吗?

sed 's/*/#&/' text.txt
这个却不行,为什么呢?

论坛徽章:
0
2 [报告]
发表于 2005-05-18 16:57 |只看该作者

给每行前面加 # 的疑问

.代表单个,*代表任意个,为什么不能用*,而要用.*呢?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2005-05-18 17:01 |只看该作者

给每行前面加 # 的疑问

*跟在一个RE后面时才表示0或多个,单独用*就表示*

论坛徽章:
0
4 [报告]
发表于 2005-05-18 17:09 |只看该作者

给每行前面加 # 的疑问

[quote]原帖由 "waker"]*跟在一个RE后面时才表示0或多个,单独用*就表示*[/quote 发表:

谢谢waker
也就是说,单独一个 * 是不被看作是个RE的吗?
那为什么单独一个 . 就可以呢?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
5 [报告]
发表于 2005-05-18 17:32 |只看该作者

给每行前面加 # 的疑问

就是这么规定的,不能讨价还价

论坛徽章:
0
6 [报告]
发表于 2005-05-18 18:10 |只看该作者

给每行前面加 # 的疑问

[quote]原帖由 "waker"]就是这么规定的,不能讨价还价 [/quote 发表:

哦,原来酱紫,谢谢wakerGG

论坛徽章:
0
7 [报告]
发表于 2005-05-19 19:27 |只看该作者

给每行前面加 # 的疑问

因为单独的.是长\.这个样子的

论坛徽章:
0
8 [报告]
发表于 2005-05-19 19:41 |只看该作者

给每行前面加 # 的疑问

awk '{print "#"$0}' file

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
9 [报告]
发表于 2005-05-19 21:18 |只看该作者

给每行前面加 # 的疑问

原帖由 "云飞舞" 发表:
sed 's/.*/#&/' text.txt
sed 's/./#&/' text.txt
sed 's/^.*/#&/' text.txt
sed 's/^./#&/' text.txt
sed 's/^/#&/' text.txt
这些都行.........


条条道路通罗马。这么多条命令效果“一样”(其实有的还是有点区别),怎么理解其中细微之处呢?下面就抛砖引玉,谈谈我的看法:
sed 's/.*/#&/' text.txt
.*匹配整行(包括空行),在整行前面加#
sed 's/./#&/' text.txt
.匹配任一字符,但s命令后没有g修饰,将只替换第一个匹配,即每行第一个字符前加#。注意了这时空行是不匹配的!
sed 's/^.*/#&/' text.txt
与第一条相同,其实这里^是不必要的,因为.*匹配空串或任意长度的任意字符串(这里的讨论限定为单行的情况),所以必定在行首就会得到匹配。
sed 's/^./#&/' text.txt
^.匹配行首第一个字符,当然此时空行也不会被匹配。
sed 's/^/#&/' text.txt
^代表行首的位置,在这个位置前加#就是在行首加#,这条会匹配空行。其实这条还可简化,于是我们再加下面一条:
sed 's/^/#/' text.txt

不妥之处,欢迎大家拍砖!

论坛徽章:
0
10 [报告]
发表于 2005-05-19 21:33 |只看该作者

给每行前面加 # 的疑问

太谢谢woodieGG了,讲的非常透彻,而且通俗易懂!
其中,sed 's/^/#/' xxx的用法,给我感觉有点类似
# cat text
×××..×
# awk -F"[×.]" '{print $2}' 里面“空隙”的概念(这里的×代表空格)
用空格或 .  来做分隔符,每个空格之间实际也是有空隙的
's/^/#/'实际就好像是把每行最前面的空隙替换成#一样,因此对空行也有效

以上是我的一点拙见,说的不对请大家纠正
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP