grep是常用的文本处理工具,与正则表达式结合则更加加深了grep的功力,且正则表达式不仅可以用于grep中,也适用于其他命令,甚至在window中也会用到正则表达式,因此正则表达式是一项非常重要的技能,必须get
1.grep基本语法
grep的功能是查找并显示,语法如下
grep [options] patten [file]…
在file或其他标准输入中查找满足patten过滤条件的行并根据options设置的选项进行显示
(可以先在.bashrc中设置grep的别名为grep --color=auto,这样满足过滤跳进的字符串就会用其他颜色显示,便于查看,编辑完.bashrc后别忘了输入. .bashrc使之生效)
2.options
–color=auto:对匹配到的文本进行着色
-v:反向显示,即显示和patten不匹配的选项
-Bn:将满足条件的前n行也显示出来(before)
-An:将满足条件的后n行也显示出来(after)
-Cn:将前n行和后n行都显示出来
-i:忽略字符大小写
-n:显示行号
-o:只显示匹配的字符串(默认是整行都显示出来)
-w:匹配整个单词(数字、下划线和点都是单词的一部分)
-e:匹配多个patten
-q:静默模式,不显示任何信息
如grep -e ‘word1’ -e ‘word2’ grep_text
2.正则表达式
查看帮助信息:man 7 regex
正则表达式可以实现字符匹配、匹配次数、位置锚定、分组等功能
2.1 字符匹配
. 匹配任意单个字符(当.放在中括号里面是表示点本身,不表示匹配任意单个字符)
[]匹配指定范围内的任意单个字符,比如[abc]
[^]匹配指定范围除外的任意单个字符,比如[^abc]
[:alnum:]匹配字母和数字
[:alpha:]匹配大小写字母
[:lower]匹配小写字母,相当于[a-z]
[:upper:] 匹配大写字母,相当于[A-Z]
[:blank:]匹配空格和制表符
[:space:]
[:digit:]匹配十进制数据
[:xdigit:]匹配十六进制数据
2.2 匹配次数
匹配次数:用在指定的字符后面,表示匹配前面的字符的次数
*表示任意次,包括0次
(通配符中 *表示任意长度的字符串,通配符用于文件名)
?表示0次或1次
+表示1次以上,包括一次
{n}表示匹配n次(先写{n},然后在左右大括号前加上\)
{n1,n2}表示至少n1次,最多n2次
{,n}表示最多n次
{n,}表示最少n次
将字符匹配和匹配次数联合起来使用,比如
grep “my name is [a-z]{3,8},my age is [0-9]+”
2.3 位置锚定
位置锚定可以指定匹配的字符串出现的位置
^ 写在patten的最左侧,表示出现在行首 (在2.1字符匹配中,^表示指定范围外的任意字符,^是放在中括号中的,在位置锚定中,^是整个patten的最左侧,比如grep “^my” file_name
$写在patten的最右侧,表示出现在行末
^patten$,表示匹配整行
^$表示空行
^[[:space:]]$表示空白行 grep -v “^[[:space:]]*$” file_name
\<或\b表示词首锚定,用于单词模式的左侧
\>或\b 表示词尾锚定,用于单词模式的右侧
\<patten\>匹配整个单词 ,相当于grep -w
2.4 分组
分组:将多个字符看成一个整体,需要用小括号将他括起来,当然小括号前面需要加\进行转义,如(test)
分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3
\1表示从做左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
|;或,比方说grep “(a|b)_head” ,如果字符串中有a_head或b_head都会匹配