linux中有很多功能强大的文本处理小工具比如awk,grep,tr等,这也是linux下一大特色和优势,mysys下也有对应的一些小exe程序,但是有些功能有可能会被阉割一些,还是linux下原生的比较好~有点偏题~
今天我们总结下linux下grep命令的使用:
1.grep介绍
gerp是“Global Regular Expr
最简单的例子,test.txt中有两行:hello world!
hello tomorrow!
使用命令: grep tomorrow test.txt,其运行结果为:hello tomorrow!怎么样,是不是很简单,这个最简单的功能已经可以满足大多数应用,当然了,grep本身要比这个功能强大许多。
2.grep详解
Usage: grep [OPTION] ... PATTERN [FILE]
其中pattern是一个模式,一般可以用正则表达式表达,简单介绍下正则表达式:
2.1 正则表达式语法
.匹配一个任意字符
*匹配任意多个字符,如a*表示a后任意多个a,可以为0个(注意这和bash下的*通配符有所不同)
\{\}中可以指定多少个前导字符的出现,如a\{2\}表示出现aa,a\{2,5\}表示出现aa或者aaa或者aaaa或者aaaaa,也就是出现2-5个a的模式,注意{和}在bash中有特殊含义,必须加\去除转义才能使用,也就是不要丢掉\
^表示行开始
$表示行结尾
\<表示从匹配的行开始
\>表示到匹配的行结束
[] 表示元组,如[abcd]表示a,b,c,d中的任意一个;[a-z]表示a-z中任意一个,也即小写字母表;[^]表示排除,如[^a]表示非a字符的集合
\转义字符前导,能将特殊字符转为普通字符
除了上面讲到的正则表达式外,grep还可以使用扩展正则表达式,可以使用grep -E 或者egrep调用,扩展正则表达式的主要增加规则如下:
扩展情况下:+表示一个或者多个前导字符,如a+表示至少一个a
?表示0个或者1个前导字符,如a?表示0个或者1个a
|表示或关系,如dog|dag表示dog或者dag中的一个
()合并单元组,如'g(oo|o)d'表示good或者god,括号表示oo和o二者具有相同地位
2.2 主要参数讲解:
-c 只输出匹配行的计数,不显示匹配结果
-i 不区分大小写(用于单字符)
-n 显示匹配的行号
-v 不显示不包含匹配文本的所以有行
-s 不显示错误信息
-E 使用扩展正则表达式
-G 使用标准正则表达式(预设)
-e pattern 避免误认pattern,如以-为开头的模式就可以加上-e区分
-f 从文件中获得模式,可以将多种模式写成一个文件,每行一个
-b 列出样式之前的内文总共有多少byte
-A或者-B或者-C + NUM,一个系列,表示除输出匹配行外,还输出匹配前(-B)后(-A)(-C包括前后) NUM行的结果,其中 -C默认值为2
-d ACTION, --directories=ACTION,若输入的档案是一个资料夹,使用ACTION去处理这个资料夹。预设ACTION是read(读取),也就是说此资料夹会被视为一般的档案;若ACTION是skip(略过),资料夹会被grep略过;若ACTION是recurse(递归),grep会去读取资料夹下所有的档案
-H, --with-filename 如果匹配上,显示所在文件名,有路径会显示路径
-q, --quiet, --silent 静默模式,不显示所有一般匹配结果
-R -r, --recursive 递归,与-d recurse相同,递归处理文件夹下结果
-w,--word-regexp 和 -x,--line-regexp 分别表示以字或者行看待模式,如-w ‘hello’ 表示按hello字搜索,而-x 'hello'表示搜索内容为‘hello’的行(完全匹配)
以上就是grep的主要内容了,是不是一个很强大的工具呢?