Linux基础之正则表达式grep,egrep

本文发布时间: 2019-Mar-22
一、概念 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。正则表达式的特点是: 1. 灵活性、逻辑性和功能性非常的强; 2. 可以迅速地用极简单的方式达到字符串的复杂控制。 3. 对于刚接触的人来说,比较晦涩难懂。二、分类grep 基本正则表达式egrep 扩展正则表达式fgrep 不支持正则表达式元字符,搜索字符串的速度快;三、基本正则表达式grep基本正则表达式grep: Galobal search Reagular Expression and Printing1、命令格式grep [options](选项) "pattern"(模式) /path/to/file (文件)2、命令选项-i查找内容时忽略大小写(Ignore Case) -v反转查找(in Vert) --color=auto:结果匹配内容带颜色显示,默认为红色 export GREP_COLOR='01;36' 颜色可自己更改 -v:反向选取,只显示不符合模式的行; -o:只显示配模式匹配的字符串,而不是整个行; -i:不区分字符大小写 -A #:显示匹配到行时,顺带显示其后面的#个行; -B #:前面的#行; -C #:前后的#行; -E:调用扩展正则表达式; grep -E =egrep3、元字符 元字符:*,?,不表示字符本身的意义,而是用于额外功能性的描述;^:锚定行首的符合条件的内容,用法格式"^pattern"; $:锚定行尾的符合条件的内容,用法格式"pattern$"; ^pattern$ ^$:空白行 grep "^$" /etc/rc.d/rc.sysinit |wc -l 查找空白行并统计行数 .:匹配任意单个字符; *:匹配紧挨在其前面的字符的字符任意次; a*b,ab,aab,acb,b .*:匹配任意长度的任意字符 grep "r.*h" /etc/passwd grep "^r.*$" /etc/passwd []:匹配指定范围内的任意单个字符 [^]:匹配指定范围外的任意单个字符 [a-z],[A-Z],[0-9] [:lower:] a-z [:upper:] A-Z [:digit:] 0-9 [:alpha:] a-z,A-Z [:alnum:] a-z,A-Z,0-9 [:space:] 空白字符 [:pundt:] 标点符号 grep "r[0-9].*h" /etc/passwd \?:匹配紧挨在其前面的字符0次或1次; a\?b:ab,acb,aab,b ^a\?b$: \{m,n}:匹配其前面的字符至少m次,至多n次 \{0,n}:至多n次,0-n次; \{m,\}:至少m次 \{m,\}:精确匹配m次 a\{1,3}b: grep "[bB].\{2,5\}[tT]":Boot,B123T,bsd12T \< 锚定词首,用法格式:\<pattern \b: \bpattern \> 锚定词尾,用法格式:pattern\> \b: pattern\b \(\):分组,用法格式 \(ab\)\{1,3\}: ab,aab,abb,abab,ababab \(a.b\).*\1:前匹配后引用四、扩展正则表达式egrep=grep -E.:任意单个字符 []:指定范围内的单个字符 [^]:指定范围外的单个字符 *:其前面的字符任意次 +:匹配其前面的字符至少1次 ?:匹配0次到1次 {m,n} ():分组,支持引用\1,\2; a|b:a或者b;二选一 grep "(c|C)at" /etc/test.txt \<:锚定词首 \>:锚定词尾 ^:行首锚定 $:行尾锚定五、应用实例:1、显示/etc/passwd以ro开头的行;2、显示/etc/passwd,以nologin结尾的行3、显示/etc/passwd,以r开头以h结尾的行显示/etc/rc.d/rc.sysinit文件中的空白行并统计行数4、取出默认shell为bash,且其用户ID号最小的用户的用户名5、显示/etc/rc.d/rc.sysinit中符合形为“任意单个字符n任意字符任意单个字符n”模式的行;即任意单个字符后面跟了个n,n后面有任意长度的任意字符,而后是任意单个字符后面跟了个n,但后面的n之前的字符要与前面的n之前的字符相同6、显示/boot/grub/grub.conf文件中以一个或多个空白字符开头的行7、显示/var/log/secure.1文件中记录的属于当前系统时间的前一天的信息中包含“Failed password”或“FAILED LOGIN”的行;而后统计相关的行数8、匹配IP地址有两种方式[root@lyd ~]# ifconfig | grep -o -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>"172.16.251.65127.0.0.1


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表