grep命令使用详细小结

字符选取功能的工具程序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].

你可能感兴趣的:(c,正则表达式,shell,OO,工具)