-----------grep命令-----------
说明:
grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。
1.例:
grep -c 'root' 1.txt
#显示含有root的行的数量。
grep -n 'root' 1.txt
#显示root匹配的行和行号。
grep -o 'root' 1.txt |wc -l
#显示文本中含有root的个数。
grep -v 'root' 1.txt
#显示不包含root的行。
grep -A2 -n 'root' 1.txt
#显示包含root的行和行号,并显示其包含行下面的两行。
grep -B2 -n 'root' 1.txt
#显示包含root的行和行号,并显示其包含行上面的两行。
grep -C2 -n 'root' 1.txt
#显示包含root的行和行号,并显示其包含行上下的两行。
grep -r 'root' /etc/
#搜索/etc/目录下的所有文件,包含root的关键字的文件行。
grep '[0-9]' 1.txt
#把含有0到9数字的行显示出来。
grep -n 'n$' 1.txt
#显示以n结束的行。 //为什么是$符号,用 cat -A 1.txt查看文件就知道了。
grep -v '^#' 1.txt
#去除以'#'开头的行。
grep -v '^$' 1.txt | grep -v '^#'
#去除所有空行且以'#'号开头的行。
grep -n '^[a-zA-Z]' 1.txt
#显示以小写或大写英文字母开头的行。
grep -n '[^a-z]' 1.txt
#显示包含非小写字母的行。
grep -n '^[^0-9]' 1.txt
#显示以非数字开头的行。
注意:^当其在[]里面时候,表示非; 其他表示以什么开头。
2. * . ? {} \ 正则中特殊符号使用。
grep -n 'ro*t' 1.txt
#显示匹配rt,rot,root,rooooot等字符的行。此时o*是一个整体,表示允许0个或多个o的存在。
grep -n 'ro.t' 1.txt
#显示ro和t之间有一个字符(包括空格)的行。此时.表示任意字符。
grep -n -E 'ro?t' 1.txt
#显示0个或1个o的字符行。此时o?是一个整体,表示0个或1个o ; 也可以写成 egrep -n 'ro?t' 1.txt。
grep -n -E 'ro+t' 1.txt
#显示含有1个或多个o匹配的行。也可以写成 egrep -n 'ro+t' 1.txt。
3.总结:
* 0个或多个*前面的字符。
. 任意一个字符。
? 0个或1个?前面的字符。
+ 1个或多个+前面的字符。
贪婪模式 .*
贪婪匹配: grep -n 'ro.*t' 1.txt
#显示以ro开头t结尾的行。
grep 'root\|mysql' 1.txt
#显示包含root或者mysql的行。
grep -E 'root|mysql' 1.txt
#显示包含root或者mysql的行。
egrep 'root|mysql' 1.txt
#显示包含root或者mysql的行。
grep -E '(oo)+' 1.txt
#显示含有两个oo或多个oo的行。此时oo是一个整体。