非打印字符
\f 匹配一个换页符
\n 匹配一个换行符
\t 匹配一个tab(制表位)
特殊字符
$ 匹配字符串的结尾位置
grep 'tar$' file 查找tar结尾字符
^ 匹配输入字符串的开始位置
grep '^ch' file 查找ch开头的字符
() 标记一个子表达式的开始和结束,需要配合转义字符\使用
[] 中括号表达式的开始与结束
\* 匹配前面的一位字符零次或者多次,要匹配单纯的*符号,配合\
grep 'ao*' file 查找ao或者aoo或者aoo...字符
? 匹配前面的一位字符零次或一次
grep 'aa?' file 查找a或者aa字符
\+ 匹配前面的一个字符一次或多次
echo " abcdaa" | grep -n 'a+' 查找n(>=1)个连续是a的字符
. 匹配换行符之外的任意单个字符
echo a. file 查找一个任意两个字符的字符串,以a开头
\ 转义字符
{} 标定限定符表达式的开始于结束
| 指明两项之间的一个选项
限定符
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
\* 匹配前面的一位字符零次或者多次,要匹配单纯的*符号,配合\
grep 'ao*' file 查找ao或者aoo或者aoo...字符
? 匹配前面的一位字符零次或一次
echo "good" | grep 'go?d' 查找god或者gd字符
\+ 匹配前面的一个字符一次或多次
echo " abcdaa" | grep -n 'a+' 查找n(>=1)个连续是a的字符
{n} 匹配确定的n次,do{2}:代表匹配两次o,即doo
{n,} 至少匹配n次,do{2,}:代表匹配两次及两次以上,比如doo,dooo,dooo
{n,m} 匹配n到m次,do{2,3}:代表匹配2到3次,可以是doo或者dooo
[1-9]{1,2} 随机匹配一个一个1到9的数字,并且随机出现一次或者两次
[1-9]? 匹配1-9之间的数字1次或者0次
[1-9]+ 匹配1-9之间的数字,1次及其以上
#定位符
定位符能够将正则表达式固定到行首或行尾,一个单词的开头或者一个单词的结尾
>^ 匹配输入字符串开始的位置
$ 匹配输入字符串结尾的位置
\b 匹配一个字符边界,即字与空格键的位置
\B 匹配一个非字符边界
\b的位置是非常重要的
如果\b位于要匹配的字符串的前面,从单词的开头查找
\bCha 查找开头是Cha的单词
如果\b位于要匹配的字符串的后面,从单词的结尾开始查找
ter\b 查找结尾是ter的单词
\Btar 查找在单词中出现tar的单词,不包括结尾和开头
进阶 grep
-A n 符合条件行之后的n行也输出
-B n 符合条件行之前的n行也输出
-C n 符合条件行之后之前的n行都输出
-o 只显示匹配到的字符
-c 显示统计数量
-l 只要文件名
-r 递归查找
-n 显示行号
在[]括号内,^代表的是取反,在括号外,^代表的是行首的意思
grep与正则的实例
grep -n 't[ae]st' file 查找file文件中的tast或者test
grep -n '[^t]ar' file 查找ar前面不是t的字符串
grep -n '[^a-z]oo' file 查找oo前面不是小写字母的字符串
grep -A 2 'tar' file 打印tar所在行及其之后的两行
grep -n 'g.*g' file 查找g开头g结尾的字符串
扩展正则:
+ 重复一个或者一个以上的前一个RE字符
echo " abcdaa" | grep -n 'a+' 查找n(>=1)个连续是a的字符
? 重复一个或者零个前一个RE字符
echo "good" | grep 'go?d' 查找god或者gd字符
| A或者B
grep 'aa|bb' file 查找aa或者bb字符
注意:|前后是一个整体aa或者bb,不是一个RE字符a或者b
()
gerp g(o|a)d file 查找god或者gad字符
()+ 扩展正则()与+的结合体
grep 'A(abc)+B' 查找A开头,B结尾,中间一个及其以上abc的字符
要想使用扩展正则,正常的grep没有该功能
可以使用 egrep 或者 grep -E 或者对扩展正则进行转义 +
网友评论