正则表达式-grep命令
1. 基本的正则表达式 grep ^a 表示匹配以a开头的行; a$ 表示匹配以a结尾的行; ^$ 表示空白行; . 表示匹配任意一位字符; * 表示匹配其前面字符的任意次(可以是0次); .* 表示匹配任意字符任意次; ? 表示匹配前面字符1次或0次; a{3,5}表示匹配前面字符的至少3次,最多5次; [a-z] 表示匹配任意一个字母; [a-Z] 表示匹配任意一个字母(不区分大小写); [1-9] 表示匹配任意数字; [^1-9] 表示匹配不是数字; [a-Z0-9]表示匹配数字和所有字母; [[:alnum:]] 表示匹配数字和所有字母; [[:space:]] 表示匹配空格; [[:punct:]] 表示匹配标点符号 &;或b 表示匹配<符号后面的单词,必须做为首部出现 比如 &;abc &;或b 表示匹配>符号前面的单词,必须做为尾部出现 比如 abc&; ( ) 表示分组 一般和后向引用合用; 后向引用 1 引用前面第一个分组 2 引用前面第二个分组 3 引用前面第三个分组 [root@server0 ~]# grep "(a)(b)c1xc12c" test.txt abcaxcabc 2. 扩展的正则表达 egrep或grep -E + 表示匹配前面字符至少1次; ? 表示匹配前面字符1次或0次; {} 表示匹配前面字符的多少次; () 表示分组 | 表示或者 3.grep命令 -i 不区分大小写 -v 取反 -o 显示字符串本身 -n 输出时显示行号 -E 支持扩展正则表达式 等效 egrep -A 显示匹配字符的之后N行 -B 显示匹配字符的之前N行 -C 显示匹配字符的前后N行 -r 递归匹配全部文件 4.基本正则表达式应用举例 1) 查询/var/log/message文件中包含kernel的信息 [root@server0 ~]# grep kernel /var/log/messages 2) 查询/etc/passwd文件中以root开头的行 [root@server0 ~]# grep "^root" /etc/passwd root:x:0:0:root:/root:/bin/bash 3) 查询/etc/passwd文件中以nologin结尾的行,并计算行数 [root@server0 ~]# grep "nologin$" /etc/passwd 4) 查询/usr/share/dict/words 文件中以a或b开头的行 [root@server0 ~]# grep "^[a,b]" /usr/share/dict/words 5) 查询/usr/share/dict/words文件中以不以 c,d,e,f(忽略大小写)开头的行,并计算行数 [root@server0 ~]# grep "^[^c-f]" /usr/share/dict/words | wc -l 6) 在/etc/passwd中选出所有不包含nologin 的行。 [root@server0 ~]# grep -v "nologin" /etc/passwd 7) 查询/usr/share/dict/words文件中以a开头且第三个字符是z的行 [root@server0 ~]# grep "^a.z" /usr/share/dict/words 8)查询/usr/share/dict/words文件中以a开头且后面跟随5个字符的行 [root@server0 ~]# grep "^a.{5}$" /usr/share/dict/words 9)查询你的系统的CPU有几个核 [root@server0 ~]# grep "processor" /proc/cpuinfo | wc -l 10) 查询/usr/share/dict/words文件中总共10位,且以z结尾的行。 [root@server0 ~]# grep "^.{9}z$" /usr/share/dict/words 11) 查询/usr/share/dict/words文件中以 a,b,c开头,且第5位只能为s的行 [root@server0 ~]# grep "^[a,c]...s" /usr/share/dict/words 12) 查询/usr/share/dict/words文件中所有以两位数字开头的行 [root@server0 ~]# grep "^[1-9][1-9]" /usr/share/dict/words 13) 查询/usr/share/dict/words文件中以a,c开头的且不以a,c结尾行 [root@server0 ~]# grep "^[a,c].*[^a,c]$" /usr/share/dict/words 14)查询/usr/share/dict/words文件中以小写字母开头,以大写字母结尾的行 [root@server0 ~]# grep "^[a-z].*[A-Z]$" /usr/share/dict/words 5.扩展正则表达式 1)去除a.txt 空白行与#开头的行 [root@server0 ~]# egrep -v "^$|^#" a.txt 2)搜索god good goood等字符串 [root@server0 ~]# egrep "go{1,3}d" a.txt 3)搜索gd 或者 god字符串的行 [root@server0 ~]# egrep "go?d" a.txt (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |