grep作用:使用模式匹配指定文件中的文本,是一款很好用的文本搜索和过滤工具
模式:正则表达式字符以及文本字符编写的过滤条件
正则表达式:由一类特殊字符及文本字符所编写的的模式,其中有些字符不表示字面意义,而表示 控制或者通配功能,分为基本正则表达式和扩展正则表达式两类
grep默认使用基本正则表达式,egrep或者grep -E开启扩展正则表达式
--color=auto:为匹配到的字符着色
-v:反选,显示不能被模式匹配到的行
-F:使用fgrep
-P:使用perl语言的正则表达式引擎(功能异常强大)
-o:仅显示匹配到的字符(默认显示整行)
-i:匹配时忽略字符大小写
-q:静默模式,即使匹配到也不输出到屏幕
-A n(n是数字):显示匹配到的行及行后面n行
-B n:显示匹配到的行及行前面n行
-C n:显示匹配到的行及行前后n行
基本正则表达式:
字符匹配
. :表示匹配任意单个字符
[]:匹配指定范围内的任意单个字符
^:匹配范围之外的字符
次数匹配:用在要指定次数的字符后面,用于指定前面的字符出现的次数
*:匹配其前面的字符任意次(0到n次)
\?:匹配其前面的字符0次或1次(前面的\是用来转义的)
.*:匹配任意长度的任意字符
\+:匹配其前面的字符至少一次
\{m\}:匹配其前面字符精确m次
\{m,n\}:匹配其前面的字符至少m次最多n次
使用范例:新建一个文本文件grep.txt,内容如下:
tip:上例匹配到了‘xyxyxyxy‘,所以默认情况下正则表达式工作在贪婪模式下
位置锚定:
^:锚定行首
$:锚定行尾
^$:锚定空行
^[[:space:]]*$:锚定空白行(包括制表,空格)
单词锚定
\<或\b:词首锚定,应出现于单词模式左侧
\>或\b:词尾锚定,应出现于单词模式右侧
\b<pattern>\b:锚定整个单词
分组:将一个或多个字符捆绑在一起当做一个整体进行处理
\(\)
后向引用:引用前面分组括号中的模式匹配到的字符
\1:匹配从左侧起第一个左括号以及与之匹配的右括号之间的所匹配到的字符
\2:匹配从左侧起第二个左括号以及与之匹配的右括号之间的所匹配到的字符
\n:匹配从左侧起第n个左括号以及与之匹配的右括号之间的所匹配到的字符