加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

egrep和grep和正则表达式

发布时间:2020-12-14 01:55:36 所属栏目:百科 来源:网络整理
导读:grep文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示能够被模式所匹配到的行 格式:grep [options] 'PATTERN' file,... grep 常用选项: --color=auto:用颜色显示匹配到的字符。 -n: 显示行号 -o: 仅显示被模式匹配到的字串,而非整行 -i

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读