Linux-文本处理三剑客grep详解

举报
jiangxl 发表于 2022/04/14 01:10:21 2022/04/14
【摘要】 文本处理:grep grep家族 =========================================== grep:在文件中全局查找指定的正则表达式,并打印所有包含该表达的行 eg...

文本处理:grep

grep家族

===========================================

grep:在文件中全局查找指定的正则表达式,并打印所有包含该表达的行

egrep:扩展的egrep,支持更多的正则表达式元字符

fgrep:固定grep(fixed grep),有时也被称作快速(fast grep),它按字面结束所有的字符,比如*就是原义,?就是?

1.grep命令格式

grep [选项] PATTERN filename filename…

[root@localhost my_scripts]# grep ‘jxl’ /etc/passwd;echo $?

[root@localhost my_scripts]# grep ‘jxl’ /etc/test;echo $?

[root@localhost my_scripts]# grep “bash shell”/etc/test;echo $?

找到: grep返回的退出状态为0

没找到: grep返回的退出状态为1

找不到指定文件: grep返回的退出状态为2

grep程序的输入可以来自标准输入或管道,而不仅仅是文件

ps aux | grep ‘sshd’ //过滤包含sshd的

grep ‘jxl’ /etc/passwd/ etc/shadow /etc/group //在多个文件检索

ll | grep ‘^d’ //检索是目录的

2.grep使用的元字符

grep:		使用基本元字符集 ^,$,[],*,.,[],[^],\<\>,\(\),\{\},\+,\|
egrep(或grep -E):使用扩展元字符集?,+,{},(),|
注:grep也可以使用扩展集中的元字符,仅需要对这些元字符前置一个反斜线
\w		所有字母与数字,称为字符'[a-zA-Z0-9]*ve'	'l[\w*ve]'
\W		所有字母与数字之外的字符,称为非字符'love[^a-zA-Z0-9]+'		'love\W+'
\b		词边界		'\<love\>'

3.grep实例

grep -E 或者egrep

egrep 'NW' datafile				//过滤nw的
egrep 'NW' d*					//在开头是d的文件中匹配
egrep '^n' datafile				//匹配n开头的
egrep '4$'	datafile			//以4结尾的行
egrep TB savage datafile		//在saveage datafile中找TB
egrep 'TB savage' datafile		//在datafile中找TB savage
egrep '5\..' datafile		//匹配5再跟一个.在跟一个任意字符的行
egrep '\.5' datafile		//匹配.在跟一个5
egrep '^[we]' datafile		//匹配开头是w或者e行
egrep '[^0-9]' datafile			//不是0-9开头的行
egrep '[A-Z][A-Z][A-Z]' datafile 		//匹配A-Z其中一个在跟A-Z其中一个再跟A-Z其中一个
egrep 'ss*' datafile //匹配s出现0次或多次
egrep '[a-z{9}]' datafile		//匹配相同字母出现9次
egrep '\<north' datafile 		//匹配以north开头的词
egrep '\<north\>' datafile		//以north开头和结尾的词
egrep '\<[a-r].*n\>' datafile	//匹配以a-r再跟任意一个字符出现0次到多次再跟一个n结尾的词
egrep '^n\w*\W' datafile	//匹配一个n开头并且在跟任意字符出现0次到多次再跟特殊字符
egrep '\bnorth\b' datafile	//匹配north开头和结尾的词

egrep 'NW|EA' datafile		//匹配NW和EA的行
egrep '3+' datafile		//匹配3出现一次或多次
egrep '2\.?[0-9]' datafile		//匹配2再跟一个.出现0次或1次再跟0-9任意一个字符的行
egrep '(no)+' datafile		//匹配no出现一次到多次,nononono这种
egrep 's(h|u)' datafile		//匹配sh或者su
egrep 'sh|u' datafile		//匹配sh或u

4.grep选项

-i		忽略大小写
-l		只列出匹配行所在的文件名
-n		在每一行前面加上他在文件中的相对行号
-c		显示成功匹配的行数
-s		禁止显示文件不存在或者文件不可读的错误信息
-q		静默--quiet,--silent不输出匹配的信息
-v		反向查找,只显示不匹配的行
-R		等同于-r 递归针对目录
--color	颜色
-o		只显示匹配的内容不会显示整行,值显示查找的内容,例如查找if结果只有if
-B		匹配行的前几行
-A		匹配行的后几行
-C		匹配行的前后几行

grep -R 'if' *				//递归匹配if
grep  '^[a-Z0-9]' /etc/vsftpd/vsftpd.conf		//过滤字符开头的行
grep -v '^#' /etc/vsftpd/vsftpd.conf
grep -c -v '^#' /etc/vsftpd/vsftpd.conf
grep  -c '^[a-Z0-9]' /etc/vsftpd/vsftpd.conf
grep  -n '^[a-Z0-9]' /etc/vsftpd/vsftpd.conf
grep  -R -l '^[a-Z0-9]'   *
grep --help | grep '\-v'
useradd --help | grep '\-u'
egrep '([0-9]{1,3}.){3}([0-9]{1,3})'  /etc/sysconfig/network-scripts/ifcfg-ens33	//匹配组字符0-9并且出现1次到三次的然后连续匹配3次再跟一个0-9出现一次到三次的
grep '^IPADDR' /etc/sysconfig/network-scripts/ifcfg-ens33 | egrep -o '([0-9]{1,3}.){3}([0-9]{1,3})'
grep -B2 'root' /etc/passwd
grep -A2 'root' /etc/passwd
grep -C2 'root' /etc/passwd

文章来源: jiangxl.blog.csdn.net,作者:Jiangxl~,版权归原作者所有,如需转载,请联系作者。

原文链接:jiangxl.blog.csdn.net/article/details/106166022

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。