shell——正则表达式、grep

本文深入解析正则表达式的基本与扩展元字符,演示如何在Linux环境下使用grep、egrep和vim进行文本搜索与替换操作。涵盖正则表达式语法、grep命令选项及应用场景,适用于初学者和进阶用户。

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

grep ‘c*’ /etc/passwd
grep ‘c\+’ /etc/passwd
egrep ‘c+’ /etc/passwd

在vim下面用 :%s/xxx/aaa/ 可将所有字符串xxx替换为aaa
/^$/找的是空行,包括回车
最好用egrep而且搜索的正则表达式要加双引号或单引号,最好是双引号

1、正则表达式元字符

基本正则表达式原字符

元字符功能示例说明
^行首定位符^love以l开头且后面跟ove的
$行尾定位符love$
.匹配单个字符l…e匹配l和e之间有两个任意字符的字符串
*匹配前导符0到多次ab*love匹配如alove,ablove,abbbbblove
.*任意多个字符
[]匹配指定范围内的一个字符[lL]ove匹配love或Love
[ - ]匹配指定范围内的一个字符[a-z0-9]ove小写a-z和0-9中任意一个在加ove
[^]匹配不在指定组内的字符[^a-z0-9]ove
\用来转义元字符love\.这里把.转义为了原始的标点符号
\<首定位符\<love
\>尾定位符love\>
\(..\)匹配稍后使用的字符的标签:% s/172.16.130.1/172.16.130.5/
可简化为
:% s/\(172.16.130.\)1/\15/
也可写成:
% s/\(172.\)\(16.\)\(130.\)1/\1\2\35/
将文本内容172.16.130.1转化为172.16.130.5 第二个的\1相当于第一个括号里的内容
x\{m\}字符x重复出现m次o\{5\}
x\{m,\}字符x重复出现m次以上o\{5,\}
x\{m,n\}字符x重复出现m到n次o\{5,10\}

扩展正则表达式元字符这里应该是一定要用egrep的

元字符功能示例说明
+匹配一个或多个前导字符[a+z]+ovea-z中至少匹配一个
匹配一个或0个前导字符lo?ve
a|b匹配a或blove|hate
()组字符love(able|rs)ov+ ov+ (ov)+ov+是v重复一个或多个(ov)+是重复ov一个或多个ovovovo…
(..)(..)\1\2标签匹配字符(love)able\1er\1相当于love
x{m}字符x重复m次o{5}
x{m,}字符x重复至少m次o{5,}
x{m,n}字符x重复m到n次o{5,10}

POSIX字符类

元字符功能示例说明
[:alnum:]字母与数字字符[[:alnum]]+实例是匹配一个或多个字母或数字的
[:alpha:]字母字符(包括大小写字母)[[:alpha] ]{4}
[:blank:]空格与制表符[[:blank:]]{4}
[:digit:]数字字母[[:digit:]]?
[:lower:]小写字母[[:lower:]]{5,}
[:upper:]大写字母[[:upper:]]+
[:punct:]标点符号[[:punct:]]
[:space:]包括换行符,回车等在内的所有空白[[:space:]]+

正则表达式示例 在vim里用esc :

/love/
/^love/
/love$/
/l.ve/
/lo*ve/
/[Ll]ove/
/love[a-z]
/love[^a-zA-Z0-9]/

/.*/
/^$/
/^[A-Z]..$/
/^[A-Z][a-z]*3[0-5]/
/[a-z]*\./
/^ *[A-Z][a-z][a-z]$/注意这是匹配开头有或者没有空格的
/^[A-Za-z]*[^,][A-Za-z]*$/
/\<fourth\>/
/\<f.*th\>/
/5{2}2{3}\./

空行
/^$/
/^[\t]*$/

注释行
/^#/
/^[\t]*#/

grep

grep
egrep
fgrep
grep选项

选项完整选项意义例子
-i- -ignore-case忽略大小写
-l- -files-with-matches只列出匹配行所在的文件名
-n- -line-number在每一行前面加上它在文件中的相对行号
-c- -count显示成功匹配的行数
-s–no-message禁止显示文件不存在或者文件不可读的错误信息
-q- -quiet,- -silent静默,会打印出命令返回值
-v- -invert-match反向查找,只显示不匹配的行
-R,-r- -recursive递归查找针对目录grep -R ‘aa’ /file 目录
egrep ‘aa’ /file/*递归查找文件
- -color颜色
-o- -only-matching只显示匹配的内容(默认情况也就是选项为空的情况是显示匹配的行的所有内容的)
-B- -before-context=NUMprint NUM lines of leading context-B2显示所在行前面两行
-A- -after-context=NUMprint NUM lines of trailing context-A2显示所在行后面两行
-C- -context=NUMprint NUM lines of output context-C2 显示所在行前后两行

命令格式
grep [选项] PATTERN filename1 filename2。。其中PATTERN 表示正则表达式的模式(就是正则表达式)filename是要对PATTERN 进行查找的文件
可用
man grep
查看使用文档或者grep help
grep -E相当于egrep

grep '-v’这样的话系统会把-v看成是选项而不是模式应该这样grep ‘-v’

ps:

元字符作用或等价于
\w(word)所有字母与数字,相当于字符[a-zA-Z0-9]‘l[a-zA-Z0-9]*ve’ 等价于 ‘\w*ve’
\W所有字母与数字之外的字符,称为非字符'love[^a-zA-Z0-9]+‘等价于’love\W+’
\b词边界‘<love>‘等价于’\blove\b’
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值