您的位置:首页 > 其它

grep命令使用详细小结

2010-08-26 23:31 274 查看
字符选取功能的工具程序grep:

grep [-acinv] '搜索字符串' 文件名

example:

1、搜索特定字符串:grep -n 'the' myfilename

2、利用[]来搜索集合字符:要搜索如test、taste这二个,它们有相同的部分,就是t?st,那么就可以这样:

grep -n 't[ea]st' myfilename []中不管有几个字符,都只代表“一个”字符。

如果不想某一些字符串前不能有另外的字符时,就可以用:

grep -n '[^g]oo' myfilename 不想在oo的前面有g这个字符

如果不想oo前面有小写字母,所以,可以这样写[^abcd...z]oo,但这样不太方便,由于小写字母的ascll码是顺序的,可以这样写:

grep -n '[^a-z]oo' myfilename

在一组集合字符中,如果上字符组是连续的,如大写英文字母 小写字母 数字等,就可以使用[a-z][A-Z][0-9]等方式来书写,如果要求字符串是数字与英文,就全部写在一起,变成:[a-zA-z0-9],如:要取得有数字的那一行:grep -n '[0-9]' myfilename

3、行首与行尾字符^$

我们查询一行字符里有the,如果想让the只在行首出现,就要使用定位符:

grep -n '^the' myfilename

如果想列出开关是小写字母的那一行呢?可以这样:

grep -n '^[a-z]' myfilename

如果我不想要开关是英文字母,可以是这样的:

grep -n '^[^a-zA-Z]' myfilename

如果要长出行尾结束为小数点(.)的一行,处理方法如下:

grep -n '/.$' myfilename

因为小数点具有其它含义,所以必须要用转义符(/)来解除其特殊意义。

找出哪一行是空白行:

grep -n '^$' myfilename

去掉文件中的空行及注释(以C文件为例):grep -v '^$' /etc/syslog.conf | grep -v '^#'

4、任意一个字符(.)与重复字符(*)

如要找出g??d字符串,即共有四个字符,起始是g结束是d,可以这样做:

grep -n 'g..d' filename

这里的.代表的是"绝对有一个任意字符"。

如果想列出有oo、ooo、oooo的数据,也就是说,至少要有两个o以上,如何做呢?

因为(*)表示“重复0个或多个前面的RE字符“,因此,(o*)表示"拥有空字符或一个o以上的字符"。

如:至少二个o以上的字符串时,这样写:

grep -n 'ooo*' filename 前二个o是必须的,第三个o是可有可无的。

5、限定连续重复字符范围{}

以上我们可以通过(.)(*)来设置0个到无限多个重复字符,如果想限制一个范围内的重复字符数呢?如:要找出2-5个o的连续字符串,如何做?就要使用限定范围字符{}了,因为{与}的符号在shell有特殊意义,因为必须用转义字符/让它失去意义。假设要找到两个o的字符串,可以这样做:

grep -n 'o/{2/}' filename

假设要找出g后面接2~5个o,然后接一个g的字符串,它会是这样的:

grep -n 'go/{2,5/}' filename

如果想要的是两个o以上的gooo..g?除了可以使用gooo*g,也可以使用下面的方法找出来:

grep -n 'go/{2,/}' filename 连续重复o字符2次以上.

通配符的反向选择为[!range],正则表达式则是[^range].
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: