1.概述
grep 是一种在 Linux 和 UNIX 系统中用于文本搜索的强大命令行工具。它的名字来自 "Global Regular Expressions Print"。grep 可以在文件中搜索特定的字符串或者正则表达式,并将匹配的行输出到标准输出(stdout)。
2.用法及其相关知识
1)使用grep/egrep命令,默认设置了别名,会自动加上颜色,如果查找出的数据没有颜色,需要手动设置
例如:查询test.txt中包含hello的行
grep 'hello' test.txt:这一行中的hello会被标记上颜色,
如果没有颜色,请使用如下指令
alias grep = 'grep --color=auto'
alias egrep = 'egrep --color=auto'
2)符号概述
正则表达式 | 符号 |
---|---|
基础正则 | ^ * . $ .* [] [^] \ |
扩展正则 | | + () {} ? |
其他正则 |
1))基础正则
^的意思就是以xxx开头
找出test.txt中以A开头的行:grep '^A' test.txt
$的意思就是以xxx结尾
找出test.txt中以6结尾的行:grep '6$' test.txt
注:有些末尾有空格,注意空格也是符号,需要加上去
test.txt中以6 结尾的行:grep '6 $' test.txt(空格数目保持一致)
^$表示空行
找出test.txt中的空行:grep -n '^$' test.txt
-n:显示行号
排除出test.txt中的空行:grep -v '^$' test.txt
-v:排除
排除出test.txt中的空行并显示行号:grep -nv '^$' test.txt
.表示任意一个字符
找出找出test.txt中qwer、qwdr、qwcr
grep 'qw.r' test.txt
注:.会自动排除空行
\去掉特殊符号(转义字符)
找出找出test.txt中以.结尾的行
grep '\.$' test.txt
*表示一个字符连续出现
找出找出test.txt中0连续出现的地方
grep '0*' test.txt(全文显示,连续0标颜色)
.*表示所有
找出test.txt中以任意开头到pp的行
grep '^.*pp' test.txt
贪婪模式
例如:test.txt数据为root:1234556:bin:213
请找出root:1234556:
grep '^.*:' test.txt,然而这里会输出root:1234556:bin:
贪婪模式他会尽可能的输出最大的范围
正确表达式:grep '^.*6:' test.txt(多写一点)
[]其中之一
找出test.txt中a,b,c任意一个
grep '[abc]' test.txt(全文显示,a,b,c有颜色,一次只找一个)
grep -o '[abc]' test.txt(列出查找过程)
找出test.txt中的数字:grep '[0-9]' test.txt
找出test.txt中的小写字母:grep '[a-z]' test.txt
找出test.txt中的大、小写字母:grep '[a-zA-Z]' test.txt
简写:grep '[a-Z]' test.txt(有些情况下不一定能用)
找出test.txt中的大、小写字母和数字:
grep '[a-zA-Z0-9]' test.txt
找出test.txt中以a,b开头的行:grep '^[ab]' test.txt
找出test.txt中以.或!结尾的行:grep '[.!]$' test.txt(中括号会去掉符号特殊含义,所以不用加\)
[^]非其中之一
找出test.txt中非a,b,c的数据
grep '[^abc]' test.txt(全文显示,a,b,c无颜色,其余有颜色)
2))扩展正则
+表示前一个字符连续出现一次或一次以上
找出test.txt中连续出现的0
grep -E '[0+]' test.txt(grep需要-E来支持扩展正则)
或 egrep '[0+]' test.txt(egrep默认支持扩展正则)
egrep -o '[0+]' test.txt(只展示连续出现的部分)
找出test.txt中连续出现的数字
egrep '[0-9]+' test.txt
找出test.txt中连续出现的字母或单词
egrep '[a-Z]+' test.txt
|表示或者
找出test.txt中包含hello或word的行
egrep '[hello|word]' test.txt
排除test.txt中的空行或者注释,并显示行号
egrep -vn '[^$|#]' test.txt
()表示一个整体,用于反向引用(sed中)
找出test.txt中hello或者heloo
egrep 'hel(l | o)o' test.txt
{}例如a{m,n},表示前一个字符a至少出现m次,最多出现n次
格式 | |
---|---|
a{m,n}表示前一个字符a至少出现m次,最多n次 | 连续出现范围 |
a{n}前一个字符出现n次 | 固定次数 |
a{n,}或a{,m}前一个字符最少n次或最多m次 | 单个范围 |
找出test.txt中连续出现1-5次的0
egrep '0{1,5}' test.txt
?表示前一个字符出现0次或1次
hello
heello
hllo
上面3行数据为test.txt中的数据,找出e出现0或1次的数据
egrep 'he?llo' test.txt
输出结果为:hello和hllo
3))其他正则
找出test.txt中大小写字母和数字
grep '[[:alnum:]]' test.txt
扩展:
[:alnum:]表示[0-9A-Za-z]
[:alpha:]表示[A-Za-z]
[:digit:]表示数字