grep/egrep正则表达式
正则表达式:用指定字符串去匹配指定的行。
grep (缩写来自Globally search a Regular Expression and Print)是一种强大的文本搜索工具,它能使用正则表达式搜索文本
,并把匹配的行打印出来。Unix的grep家族包括grep、egrep和fgrep。
语法: grep [-cinvABC] 'word' filename
--color //在匹配的时候,把关键字用颜色标识起来。
alias cg="grep --color" //可以把grep --color编成别名。为了永久使用可以把它加在.bashrc中。
-n //在匹配的时候,显示行号。
-c //在匹配的时候,只显示出现了多少行。
-v //在匹配的时候,取反。
-A num //如A2,除了输出符合条件的行,还要输出它下面两行。
-B num //如B2,除了输出符合条件的行,还要输出它上面两行。
-C num //如C2,除了输出符合条件的行,还要输出它上下面各两行。
-r //遍历查找文件内容,如果不想显示前面的文件名可以加个h,即-rh.
cg -rh 'iptables' /etc/*
注:如果用vim编辑1.txt时,没有正常退出,会产生文件1.txt.wap,下次vim 1.txt时,会有相关提示。
cg '^$' 1.txt //查找空行。
cg 'r.o' 1.txt //.表示r与o之间的任意一个字符。
cg 'r*o' 1.txt //除了o之外,还要匹配零个或多个*前面的字符
cg 'r.*o' 1.txt //.*表示匹配任意个字符(零个或多个)。在这里r开头,o结尾的都能匹配。
cg 'r\?o' 1.txt //匹配零个或一个问号前面的字符。
cg -E 'r?O' 1.txt //-E选项相当于脱义。
cg -E ==egrep
egrep 'r+o' 1.txt //匹配一个或多个加号前面的字符。
egrep --color 'root|nologin' 1.txt //匹配root或nologin(|表示或者)
egrep --color 'root' 1.txt |egrep --color 'nologin' //通过管道符来实现'与'的目的。(&不能表示'与'。)
egrep --color '(rr)+' 1.txt //用括号括起来的内容表示一个整体。
egrep --color '(rr){1,3}' 1.txt //匹配一到三次括号里的内容。
egrep --color '(rr){5}' 1.txt //匹配5次括号里的内容。
注:? + () {} |这些符号使用时需要用egrep;grep使用时需要加脱义符;grep -E也可以用。
EG:
grep -c 'false' test001.txt
-i //忽略大小写
grep -i 'FALSE' test001.txt
-n
grep -n 'false' test001.txt
-v //打印不符合要求的行
grep -v 'false' test001.txt
-A
grep -A2 'root' test001.txt
-B
grep -B2 'daemon' test001.txt
-C
grep -C2 'nobody' test001.txt
其他用法:
过滤不带有某个关键词的行,并输出行号:
grep -nv 'root' test001.txt
过滤出所有包含数字的行
grep '[0-9]' test001.txt
过滤出所有不包含数字的行
grep -v '[0-9]' test001.txt
把所有以 ‘#’ 开头的行去除
grep -v '^#' test001.txt
去除所有空行和以 ‘#’ 开头的行
grep -v '^#' test001.txt|grep -v '^$'
//在正则表达式中, “^” 表示行的开始, “$” 表示行的结尾,那么空行则可以用 “^$” 表示.
过滤任意一个字符与重复字符
grep -n 'r..t' test001.txt
//. 表示任意一个字符,上例中,就是把符合r与o之间有两个任意字符的行过滤出来.
grep -n 'r**t' test001.txt
// * 表示零个或多个前面的字符。
grep -n '.*' test001.txt
//‘.*’ 表示零个或多个任意字符,空行也包含在内。
指定要过滤字符出现的次数
grep -n 'o\{2\}' test001.txt //x\{m\} 重复字符x,m次,如:'o\{2\}'匹配包含2个o的行。
grep -n 'o\{2,\}' test001.txt //x\{m,\} 重复字符x,至少m次,如:'o\{2,\}'匹配至少有2个o的行。
grep -n 'o\{2,5\}' test001.txt //x\{m,n\} 重复字符x,至少m次,如:'o\{2,5\}'匹配至少有2个o,且最多有5个o的行。
egrep
egrep命令是一个搜索文件获得模式,使用该命令可以任意搜索文件中的字符串和符号,也可以为你搜索一个多个文件的字符串,
一个提示符可以是单个字符、一个字符串、一个字、一个句子。
筛选一个或一个以上前面的字符:
egrep 'o+' test001.txt
筛选零个或一个前面的字符
egrep 'o?' test001.txt
筛选字符串1或者字符串2 :
egrep 'r(oo)|(oa)t' test001.txt
egrep '(oo)+' test001.txt //用( )表示一个整体,例如(oo)+就表示1个 ‘oo’ 或者多个 ‘oo’
转载于:https://blog.51cto.com/sunwangbackup/1716593