1.grep 用法:
grep [option] 匹配正则表达式 file
command | grep [option] 匹配正则表达式
2.常用选项:
-i 不区分大小写(只适用于单字符),即取消大小写敏感
-h 查询多文件时不显示文件名。
-l 查询多文件时只输出包含匹配字符的文件名。
-n显示匹配行及行号。
-s 不显示不存在或无匹配文本的错误信息。
-v 显示不包含匹配文本的所有行。
grep 'abc' *
grep 'abc'*afile
4.精确匹配(在关键词后面添加 \>:
grep'abc\>'file
grep -w "abc"
5.正则表达式:最好使用单引号括起来
在模式匹配中使用正则表达式,可以使grep的使用更加丰富,注意:使用正则表达式最好用单引号‘ ’,这样可以防止grep中使用的专有模式与一些shell命令相混淆。
5-1 [ ] 的使用:
指定范围 ‘48[345]',48[3-5], 48[1,3,5]
^ 在正则字串里面代码行首,在[ ]里面代表不包含 eg: 行首不是4或者8 grep '^[^48]' file
大小写不敏感: grep -i 'sept' file 等价于 grep '[sS]ept' file
匹配任意字符:
grep 'K...D' file ----匹配所有以K开头,以D结尾,5个字符长度 (. 代表任何一个字符,?代表0个或1个,*代表任意个)
grep '[A-Z]...D' file ----所有以大写字母开头,以D结尾,5个字符长度
grep '5..199[6,8]' file ---所有以5开头,以1996或者1998结尾
grep '[0-9][0-5[0-6]' file ---获取城市代码,必须要学会使用[ ]抽取信息,同理电话号码,身份证号,学号等等都可以融会贯通
5-2模式的出现几率:
grep '9\{2,\}' file ---抽取包含数字4至少重复出现2次的所有行eg:1999,1998,, 使用\{2\} --2次,\{2,5\} 2-5次均可, \{2,\} --2次以上 ,\{,2\} --不超过2次
5-3. grep过滤两个多多个关键字,用到了 与 和 或 | , 这需要借助 -E 选项,或者直接使用egrep
grep -E '123|abc' filename// 找出文件(filename)中包含123或者包含abc的行
egrep '123|abc' filename //用egrep同样可以实现
awk '/123|abc/'filename // awk 的实现方式
5-3 空行的查询:
grep -c '^$' file ---查询空行数目
+++++++++++++++++++++++++++++++++++++++++++++++==
grep: grep -v '^$' file
sed: sed '/^$/d'file 或 sed -n '/./p' file
awk: awk '/./ {print}' filefor I in $(`cat file`) echo $I end
5-4 匹配特殊字符:
询有特殊含义的字符,诸如$ . ' " * [] ^ | \ + ?,必须在特定字符前加\。
grep '\.' file
grep '\"' file
grep 'conftroll\.conf' myfile -查询配置文件controll.conf
使用正则表达式可匹配任意文件名。系统中对文本文件有其标准的命名格式。一般最多六个小写字符,后跟句点,接着是两个大写字符。
grep '^[a-z]\{1,6\}\.[A-Z]\{1,2\}' filename
5-6 查询ip地址:
要查看n n n . n n n网络地址,如果忘了第二部分中的其余部分,只知有两个句点,例如n n n . n n . .。要抽取其中所有nnn.nnn IP地址,使用[ 0 - 9 ] \ { 3 \ } \ . [ 0 - 0 \ { 3 \ } \。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。
grep '[0-9]\{3\}\.[0-9]\{3\}\.' (没有考虑范围,需要再重写)
6. 类名:
g r e p允许使用国际字符模式匹配或匹配模式的类名形式。
类名及其等价的正则表达式类等价的正则表达式类等价的正则表达式
[ [ : l o w e r : ] ] [ a - z ] [ [ : s p a c e : ] ] 空格或t a b键
[ [ : d i g i t : ] ] [ 0 - 9 ] [ [ : a l p h a : ] ] [ a - z A - Z ]
总之,grep来查询筛选出满足条件的行,主要依赖于正则表达式的强大,灵活使用[ ]界定范围, * ? . 的匹配格式化,^ $界定,\{n,m\}重复次数,当然还有\(n,m\)元组的使用,
还有零宽断言,贪婪与懒惰,平衡组与递归一些复杂的用法,在30分钟学会正则表达式一文中,可以深入学习一下,http://see.xidian.edu.cn/cpp/html/1402.html,上面一些例子可以直接拿来用的。。正则表达式在一些非编译类语言中,在各种脚本语言中都使用广泛,规则都是一样的。