^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 匹配一个非换行符的任意一个字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
? 匹配0个或一个字符,如:ro?t 可以匹配 rt ;rot 。
+ 匹配1个或多个字符,如:ro?t 可以匹配 rot;root;rooot;roooooooooooot
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 匹配单词的开始,如:/\ 匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\} 重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
grep [-cinvABC] ‘word’ filename
# grep -A2 ‘root’ passwd
-A 后面跟数字,过滤出符合要求的行以及下面n行
-B 同上,过滤出符合要求的行以及上面n行
-C 同上,同时过滤出符合要求的行以及上下各n行
Centos 7开始系统自动增加了别名alias grep=’grep –color=auto’ 所以当筛选后一般都会呈现红色
# grep -c ‘root’ passwd c:行数 //显示带有root关键字的行有多少行
# grep -n ‘nologin’ passwd n:显示行数 //显示带有nologin在原文中的段落号码
# grep -ni ‘nologin’ passwd i:不区分大小写 //不区分nologin的大小写
# grep -niv ‘nologin’ passwd v:取反 //找出不带有nologin的行
#grep -r ‘root’ /etc -r:遍历所有子目录 //查找所有目录以及子目录文件中的 root 字符
# grep -w “bash” passwd -w:精准匹配(例如在一个文本中有很多abc, abc1,abcaa,abc2;但我只需要abc,我们就需要-w 精准匹配)
# grep ‘[0-9]’/etc/inittab //匹配括号内的任意一个数字
# grep -v ‘[0-9]’/etc/inittab //匹配不带数字的行
# grep -n ‘^#’ /etc/inittab //以#开头的行
# grep -v ‘^#’ /etc/inittab //不以#开头的行
# grep ‘[^0-9]’ test.txt //非数字的行(只要不是数字,任何一个字符都可以匹配)
# grep ‘^[^0-9]’ test.txt //以非数字开头的行
# grep ‘[^a-z]’ test.txt //非小写字母的行(只要不是小写字符,任何一个字符都可以匹配)
# grep ‘^[^0-9a-zA-Z]’ test.txt //非数字和字母开头的行,(匹配特殊字符)
^ 放在 [] 里面是 取非 ^ 放在 [] 外面是 以…开头
# grep ‘r.o’ test.txt . 任意一个字符
# grep ‘oo*’ test.txt * 左边的字符重复零次或多次
# grep ‘.*’ test.txt .* 任意一个任意字符
# grep ‘o\{2\}’ /etc/passwd //匹配oo 两次的行; 并且使用脱意符号脱意 \{\}
# egrep ‘o{2}’ /etc/passwd //egrep=grep -E,不需要脱意即可
# egrep ‘o+’ /etc/passwd 匹配 + 前面的字符一次或多次
# egrep ‘oo?’ /etc/passwd 匹配 ? 前面的字符0次或1次
# egrep ‘root|nologin’ /etc/passwd //匹配root或nologin的行
# egrep ‘root|nologin|1000’ /etc/passwd //匹配root或nologin或1000的行
# egrep ‘(oo){2}’ /etc/passwd //匹配 出现oo两次的行
总结:
. //任意一个字符
.* //匹配任意个任意字符
? //匹配 ? 左边的字符0次或1次
* //匹配 * 左边的字符重复0次或多次
+ //匹配 + 左边的字符1次或多次
| // 或者
^ 放在 [] 里面是 取非 ^ 放在 [] 外面是 以…开头
例如:
^ 锚定行的开始 如:’^grep’匹配所有以grep开头的行。
$ 锚定行的结束 如:’grep$’匹配所有以grep结尾的行。
. 匹配一个非换行符的字符 如:’gr.p’匹配gr后接一个任意字符,然后是p。
* 匹配零个或多个先前字符 如:’ *grep’匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。
[] 匹配一个指定范围内的字符,如'[Gg]rep’匹配Grep和grep。
[^] 匹配一个不在指定范围内的字符,如:'[^A-FH-Z]rep’匹配不包含A-F和H-Z的一个字母开头,紧跟rep的行。
egrep=grep -E:
#egrep ‘root|nologin|1000’ /etc/passwd = #grep -E ‘root|nologin|1000’ /etc/passwd