Linux命令篇 grep

本文详细介绍了Linux下的grep命令及其用法,包括按行过滤文件内容、参数选项如递归、计数、精准过滤等,以及如何结合基本和扩展正则表达式进行更复杂的字符串匹配,如身份证号验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.语法格式

按行模糊过滤文件内容
grep 'Failed' /var/log/secure  # 过滤出文件secure中包含Failed的所有行

按行模糊过滤屏幕输出
ifconfig eth0 | grep '192'  # 过滤出屏幕中包含192的所有行 

2.参数选项

-r用于递归过滤,即过滤当前目录及其子目录中的文件内容

-c用于统计字符出现的次数 

 -w用于精准过滤,需要注意字符两边不能连接其他字符串(必须是空格)

-v用于取反,过滤出不包含当前字符所在行的其他所有行 

扩展
-E 支持扩展正则 ==egrep 该命令也可用于普通正则
-i 不区分大小写,grep默认区分大小写
-n 显示过滤出的内容在文本中的行号
-o 匹配流程,用于查看每次匹配到底匹配到了谁
-A 2 查看过滤到的行以及下2行
-B 2 查看过滤到的行以及上2行
-C 2 查看过滤到的行以及上下各2行

3.正则表达式

正则表达式:为处理大量字符串而定义的一套规则和方法,通过特殊符号快速找到需要的字符串,以行为单位进行处理。

基本正则:Basic Regular Expression,常用^ $ . * []
扩展正则:Extened Regular Expression,常用+ | () {}

4.结合基本正则使用

^$表示空行
grep '^$' 1.txt  # 过滤出空行

^表示以...开头
grep '^o' 1.txt  # 过滤出以o开头的行
grep '^^' 1.txt  # 过滤出以^开头的行

$表示以...结尾
grep 'm$' 1.txt  # 过滤出以m结尾的行
grep ' $' 1.txt  # 过滤出以空格结尾的行

注意
m=like
grep "$m" 1.txt  # 过滤出包含like的行,$表示变量时使用双引号解析变量内容
.表示任意单个字符,空格是字符,但空行(\n回车换行)中没有字符所以不会过滤到
grep '.' 1.txt   # 过滤出包含任意单个字符的行
grep '.$' 1.txt  # 过滤出以任意字符结尾的行
*表示连续匹配(前一个字符连续出现1次及以上的内容),会输出文本所有的内容。
grep 'w*' 1.txt  # 匹配文本中w连续出现1次及以上的内容
[]表示匹配其中任意单个字符,在[]中的符号会被还原本义
grep '[abc]' 1.txt            # 过滤出包含a或b或c的行
grep '[a-z]' 1.txt            # 过滤出包含a或b或c...或z的行
grep '[a-zA-Z]' 1.txt         # 过滤出包含a到z或A-Z的行 == [a-Z]
grep '[a-zA-Z0-9]' 1.txt      # 过滤出包含a到z或A-Z或0-9的行
grep '[a-zA-Z0-9,.^$]' 1.txt  # 过滤出包含a到z或A-Z或0-9或,或.或^或$的行
grep '^[abc]' 1.txt  # 过滤出以a或b或c开头的行
grep '[.;!]$' 1.txt  # 过滤出以.或;或!结尾的行

注意:中括号中的第一个^表示取反
grep '[^abc]' 1.txt  # 匹配文本中不为a、不为b、不为c的其他所有内容,会输出文本中除了空行的所有内容

5.结合扩展正则使用

+表示连续匹配(前一个字符连续出现1次及以上的内容),但默认不包含空格
egrep 'w+' 1.txt  # 过滤出w连续出现1次及以上的行
egrep '[a-z]+' 1.txt  # 过滤出a-z连续出现1次及以上的行,由于不含空格所以匹配流程为将匹配到的内容以空格为分割进行换行输出
|表示或者
egrep 'blog|www' 1.txt  # 过滤出包含blog或www的行
egrep -v '^#|^$' 1.txt  # 过滤出有意义的行(除去注释行与空行)
	删除文件中无意义的行
	echo `egrep -v '^#|^$' /etc/selinux/config` | xargs -n 1 > 1.txt
	cat 1.txt > /etc/selinux/config
()表示一个整体
egrep 'lizhen(u|y)a' 1.txt  # 过滤出包含lizhenua或lizhenya的行
{n,m}表示前一个字符连续出现最少n次,最多m次
egrep '8{2,3}' 1.txt  # 过滤出8连续出现最少2次,最多3次的行。匹配流程是将连续出现最多次作为一次匹配结果,分割后再进行匹配,如连续的数字888888会被匹配为888\n888

{m}表示前一个字符连续出现m次
egrep '8{3}' 1.txt  # 过滤出8出现连续3次的行
egrep '[abc]{3}' 1.txt  # 过滤出abc之间任意组合,但出现连续3次的行
egrep '[a-z]{3}' 1.txt  # 过滤出a-z之间任意组合,但出现连续3次的行
egrep '[0-9]{3}' 1.txt  # 过滤出0-9之间任意组合,但出现连续3次的行

过滤身份证号
egrep '[0-9]{17}[0-9X]' id.txt
egrep '\b[0-9]{17}[0-9X]\b' id.txt  # \b表示边界,前后必须是空格 == \<	\>
egrep '\<3714[0-9]{13}[0-9X]\>' id.txt  # 查找身份证开头为3714
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值