LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1280|回复: 9

请教一个grep的问题

[复制链接]
发表于 2006-9-18 01:37:11 | 显示全部楼层 |阅读模式
我再看一个教程说 grep ^[^d] a.txt 表示选择所有开头不为d的行,我知道^d表示所有开头是d的行,为什么^[^d]就表示^d的反意,请指教。
发表于 2006-9-18 02:06:08 | 显示全部楼层
这种用法我还真的没有用过,我一般用 grep -v ^d a.txt。
回复 支持 反对

使用道具 举报

发表于 2006-9-18 03:22:36 | 显示全部楼层
因为^有两种用法,一种作为锚中的行首,一种是取反,^[^d]中第一个是取反的意思
回复 支持 反对

使用道具 举报

发表于 2006-9-18 14:27:23 | 显示全部楼层
头一个^表示的是以某某字符开始,第二个^放在[]中的开始,表示不包含其后面的字符的集合。
两个意思合起来,就是去不包含d   ([^d])   为开头  (^)   的文件
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-18 21:16:40 | 显示全部楼层
那^怎么用就表示取反,是不是[^d]为一种特定用法,也就是只有[]中的^才表示取反?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-18 21:34:20 | 显示全部楼层
还有一个问题,三楼兄弟说的锚是什么意思?
回复 支持 反对

使用道具 举报

发表于 2006-9-19 00:06:45 | 显示全部楼层
锚是正则表达式里的一种原子类型,一种有四种锚,^行首,$行尾,<单词头,>单词尾
回复 支持 反对

使用道具 举报

发表于 2006-9-19 00:36:50 | 显示全部楼层
英文是 anchor。
回复 支持 反对

使用道具 举报

发表于 2006-9-19 01:14:17 | 显示全部楼层
Post by assm
那^怎么用就表示取反,是不是[^d]为一种特定用法,也就是只有[]中的^才表示取反?

是的, 在字符集([char class])表达式中, ^表示取所有不在集中的值。而如果^不在[]中,则表示pattern的起始位置。和"$"一起,他们叫做anchor(锚), 意思是他们界定了匹配表达式的起始和终点位置。"\< \>"这样的也可一叫做anchor.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-9-19 13:06:36 | 显示全部楼层
多谢各位。。。
回复 支持 反对

使用道具 举报

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

本版积分规则

快速回复 返回顶部 返回列表