egrep和grep和正则表达式

前端之家收集整理的这篇文章主要介绍了egrep和grep和正则表达式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

grep文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索显示能够被模式所匹配到的行

格式:grep [options] 'PATTERN' file,...
grep 常用选项:
--color=auto:用颜色显示匹配到的字符。
-n: 显示行号
-o: 仅显示被模式匹配到的字串,而非整行
-i: 不区分字符大小写,ignore-case
-E: 支持扩展的正则表达式 grep -E = egrep
-A #:也显示匹配到的行的下面#行
-B #:也显示匹配到的行的下面#行
-C #:也显示匹配到的行的上下#行

grep常用用法1:查找特定字符串

查找/etc/passwd文件中包含“root”的行

grep --color -n "root" /etc/passwd

wKioL1MHOmaCuYwWAABjVP7fWnk112.jpg

grep还能用管道处理前面命令输出的信息上面的命令可以:

cat /etc/passwd | grep --color -n "root"

2:“.”匹配任意单个字符

/etc/passwd文件中以r开头以t结尾中间包含两个任意字符的字符

grep --color -n "r..t" /etc/passwd

wKiom1MHOqeTeWOYAACpFDxnkMc479.jpg

grep常用用法3“$”锚定行尾

bash结尾的行

grep --color -n "bash$" /etc/passwd

wKiom1MHOruDMJ3LAABXE-4cOag263.jpg

4“^” 锚定行首

r开头的行

wKioL1MHOqnSMWFtAAD-OrRM3uo982.jpg

所以^$表示匹配空白行

5“<” 锚定词首,“>”锚定词尾,”*“ 匹配前面出现的字符任意次

t结尾的单词

grep --color "\<r[a-z]*t\>" /etc/passwd

wKioL1MHQvyiMLy7AAAgEKUFnbI925.png

因为<,>是特殊符号所以加\转意

6 匹配前面出现的字符特定次数 {m}:匹配m{m,n}mn

{m,}: 至少{0,n}:至多r开头中间有15个任意字符以t结尾的字符串

wKioL1MHOvbRO5ITAAFrIl8LfkQ269.jpg


7 “()”分组7

在判断前面的字符出现的次数时()里面的是一起出现的

如:匹配文件123中的808080

grep --color -n "\<\(80\)\{1,2\}\>" 123

wKiom1MHOy3BrApkAACwOlv9fpI495.jpg

8 “\1”引用前面第一个小括号里匹配到的所有内容,“\2”就是第二个

查找系统中uid=gid用户

wKioL1MHOxuDU40rAALWLcEBNA0816.jpg


grep用法9

[]:指定范围内的任意单个字符

[0-9]=[[:digit:]]所有数字

[a-z]=[[:lower:]]所有小写字母

[A-Z]=[[:upper:]]所有大写

[[:alpha:]]任何数字和字母

[[:alnum:]]所有字母

[[:space:]]空格

[[:punct:]]标点符号

[^]:指定范围外的任意单个字符

/etc/passwd中的所有数字:grep --color=auto "\<[0-9]\{1,\}\>" /etc/passwd

/etc/passwd中以不是r开头的行:grep--color=auto “^[^r]” /etc/passwd



egrepgrep一样只是{}()等特殊符号不用加\进行转意而且egrep支持|”

进行“或”比对比如:查找文件中带有goodgold的行

egrep “good|gold” flie 也可以写成 egrep “go(o|l)d” file

能力有限可能有的例子写错了,但是符号表示的意思没错,欢迎指正

贴点转载的练习

1、显示/proc/meminfo文件中以大小写s开头的行; # grep "^[sS]" /proc/meminfo # grep -i "^s" /proc/meminfo 2、取出默认shell为非bash的用户; # grep -v "bash$" /etc/passwd | cut -d: -f1 3、取出默认shell为bash的且其ID号最大的用户; # grep "bash$" /etc/passwd | sort -n -t: -k3 | tail -1 | cut -d: -f1 4、显示/etc/rc.d/rc.sysinit文件中,以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; # grep "^#[[:space:]]\{1,\}[^[:space:]]\{1,\}" /etc/rc.d/rc.sysinit 5、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; # grep "^[[:space:]]\{1,\}" /boot/grub/grub.conf 6、找出/etc/passwd文件中一位数或两位数; # grep --color=auto "\<[0-9]\{1,2\}\>" /etc/passwd 7、找出ifconfig命令结果中的1到255之间的整数; # ifconfig | grep -E --color=auto "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\>" 8、查看当前系统上root用户的所有信息; # grep "^root\>" /etc/passwd 9、添加用户bash和testbash、basher,而后找出当前系统上其用户名和默认shell相同的用户; # grep --color=auto "^\([[:alnum:]]\{1,\}\)\>.*\1$" /etc/passwd 10、找出netstat -tan命令执行的结果中以“LISTEN”或“ESTABLISHED”结尾的行; 11、取出当前系统上所有用户的shell,要求:每种shell只显示一次,且按升序显示; # cut -d: -f7 /etc/passwd | sort -u

猜你在找的正则表达式相关文章