Linux中的shell正则表达式详解

Shell中使用正则表达式处理文本的命令有如下工具:

命令描述
grep默认不支持扩展表达式,加-E选项开启ERE。如果不加-E,此时使用花括号时要加转义符:\{\}
egrep支持基础和扩展表达式
awk支持基础和扩展表达式
sed默认不支持扩展表达式,加-r选项开启ERE。如果不加-r,此时使用花括号时要加转义符:\{\}

注:-E 选项为扩展的正则表达式:支持+、?、|、()

. 匹配除换行符(\n)之外的任意单个字符

echo -e "123\n456" | grep "1.3"   # 显示 123

^ 匹配以xxx字符(串)开头所在的行

echo -e "abc\nxyz" | grep "^ab"   # 显示 abc

$ 匹配以xxx字符(串)结尾所在的行

echo -e "abc\nxyz" | grep "z$"   # 显示 xyz

* 匹配前一个字符0个或多个

echo -e "x\nxo\nxoo\no\noo" |grep "xo*"   # 显示 x/xo/xoo

+ 匹配前一个字符1个或多个

# grep -E 该选项为拓展的正则表达式,支持 + ? | 和 ()
echo -e "abc\nabbc\nac" | grep -E "ab+c"   # 显示 abc/abbc

? 匹配前一个字符0个或1个

echo -e "abc/abbc/ac" | grep -E "ab?c"   # 显示 abc/ac

[ ] 匹配中括号中的任意一个字符

echo -e "abd\ncdf\nghj" | grep "[ac]"   # 显示 abd/cdf

[.-.] 匹配中括号中范围内的任意一个字符

echo -e "abc\nxyz" | grep "[a-z]"   # 显示 abc/xyz

[^.] 匹配非中括号中字符(串)之外的任意一个字符(串)

echo -e "a\nb\nc" | grep "[^a]"   # 显示 b/c

^[^.] 匹配以非中括号中字符(串)开头的行

echo -e "abc\nxyz" | grep "^[^a]"   # 显示 xyz

{n,}或{n} 匹配前面的字符至少 n次

echo -e "abc\nabcc\nabccc\nabcccc" | grep -E "c{2}"   # 显示 abcc/abccc/abcccc

{n,m} 匹配前面的字符至少 n次至多m次

# -w 只选择与整个单词相匹配的行
# 注意m与前面的逗号之间没有空格
echo -e "abc\nabcc\nabccc\nabcccc" | grep -E -w "abc{2,3}"   # 显示 abcc/abccc

\< 边界符,匹配行的开始

# 匹配以ab开始的行
echo -e "abc\nabcc\ncab" | grep -E "\<ab"   # 显示 abc/abcc

\> 边界符,匹配行的结尾

# 匹配以ab结束的行
echo -e "abc\nabcc\ncab" | grep -E "bc\>"   # 显示 abc

| 匹配竖杠两边两个字符中的任意一个

echo -e "a\nb\nc" | grep -E "b|c"   # 显示 b/c

\ 转义符,将特殊符号转成字面意义上的字符

echo -e "1.2" | grep -E "1\.2"   # 显示 1.2

Posix字符

Posix字符描述
[:alnum:]等效于[a-zA-Z0-9]
[:alpha:]等效于[a-zA-Z]
[:lower:]等效于[a-z]
[:upper:]等效于[A-Z]
[:digit:]等效于[0-9]
[:lower:]等效于[a-z]
[:space:]匹配任意空白字符,等效于[\t\n\f\v]
[:graph:]非空白字符
[:blank:]空格与定位字符
[:contrl:]控制字符
[:print:]可显示的字符
[:punct:]标点符号字符
[:xdigit:]十六进制
示例echo -e "123\n1234a" | grep "[[:digit:]]" # 匹配所有包含数字的行
支持的特殊字符描述
\w匹配任意数字和字母, 等效于[a-zA-Z0-9_]
\W\w相反,等效于[^a-zA-Z0-9_]
\b匹配字符串开始或结束,等效于\<\>
\s匹配任意的空白字符
\S匹配任意的非空白字符
示例echo -e "Hello\n123" | grep "\w" # 匹配Hello和123
空白符描述
\n换行符
\r回车符
\t水平制表符
\v垂直制表符
\0空值符
\b退格符

参考:《Shell入门到精通》作者:李振良

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值