以下文章内容,参考了良哥的shell从入门到精通的文章
正则表达式在每种语言中都会有,功能就是匹配符合你预期要求的字符串,是我们要写shell脚本中最常用的
Shell 正则表达式分为两种:
基础正则表达式:BRE(basic regular express)
扩展正则表达式:ERE(extend regular express),扩展的表达式有+、?、|和()
正则
. ##匹配除换行符(\n)之外的任 意单个字符
例:匹配 123: echo -e "123\n456" |grep '1.3'
^ ##匹配前面字符串开头
例:匹配以 abc 开头的行: echo -e "abc\nxyz" |grep ^abc
$ ##匹配前面字符串结尾
例:匹配以 xyz 结尾的行:echo -e "abc\nxyz" |grep xyz$
* ##匹配前一个字符零个或多个
例:匹配 x、xo 和 xoo:
echo -e "x\nxo\nxoo\no\noo" |grep "xo*"
x 是必须的,批量了 0 零个或多个
+ ##匹配前面字符1个或多个
例:匹配 abc 和 abcc:echo -e "abc\nabcc\nadd" |grep -E 'ab+'
匹配单个数字:echo "113" |grep -o '[0-9]'
连续匹配多个数字:echo "113" |grep -E -o '[09]+'
? ##匹配前面字符0个或1个
例:匹配 ac 或 abc: echo -e "ac\nabc\nadd" |grep -E 'a?c'
[] ##匹配中括号之中的任意一个字符
例:匹配 a 或 c: echo -e "a\nb\nc" |grep '[ac]'
[ .-.] ##匹配中括号中范围内的任意 一个字符
例:匹配所有字母: echo -e "a\nb\nc" |grep '[a-z]'
[^] ##匹配[^字符]之外的任意一个字符
例:匹配 a 或 b: echo -e "a\nb\nc" |grep '[^c-z]'
匹配末尾数字:echo "abc:cde;123" |grep -E '[^;]+$'
^[^] ##匹配不是中括号内任意一个字符开头的行
例:匹配不是#开头的行: grep '^[^#]' /etc/httpd/conf/httpd.conf
{n}或 {n,} ##匹配花括号前面字符至少 n 个字符
例:匹配 abc 字符串(至少三个字符以上字符串)
echo -e "a\nabc\nc" |grep -E '[a-z]{3}'
{n,m} ##匹配花括号前面字符至少 n 个字符,最多 m 个字符
例:匹配 12 和 123(不加边界符会匹配单个字符)
echo -e "1\n12\n123\n1234" |grep -E -w -o '[09]{2,3}'
\< ##边界符,匹配字符串开始
例:匹配开始是 123 和 1234
echo -e "1\n12\n123\n1234" |grep '\<123'
\> ##边界符,匹配字符串结束
例:匹配结束是 1234
echo -e "1\n12\n123\n1234" |grep '4\>'
( ) ##单元或组合:将小括号里面作为一个组合
分组:匹配小括号中正则表达式或字符。\n 反向引 用,n 是数字,
从1开始编号,表示引用第n个分组匹配的内容
例:单元:匹配 123a 字符串
echo "123abc" |grep -E -o '([0-9a-z]){4}'
分组:匹配 11
echo "113abc" |grep -E -o '(1)\1'
匹配出现 xo 出现零次或多次:
echo -e "x\nxo\nxoo\no\noo" |egrep "(xo)*"
| ##匹配竖杠两边的任意一个
例:匹配 12 和 123:
echo -e "1\n12\n123\n1234" |grep -E '12\>|123\>'
\ ##转义符,将特殊符号转成原有意义
例:1.2,匹配 1.2:1\.2,否则 112 也会匹配到
Posix 字符
[:alnum:] 等效[a-zA-Z0-9]
[:alpha:] 等效[a-zA-Z]
[:lower:] 等效[a-z]
[:upper:] 等效[A-Z]
[:digit:] 等效[0-9]
[:space:] 匹配任意空白字符,等效[\t\n\r\f\v]
[:graph:] 非空白字符
[:blank:] 空格与定位字符
[:cntrl:] 控制字符
[:print:] 可显示的字符
[:punct:] 标点符号字符
[:xdigit:] 十六进制
示例:
echo -e "1\n12\n123\n1234a" |grep '[[:digit:]]'
shell文本处理三剑客,正则支持率
grep
#默认不支持扩展表达式,加-E 选项开启 ERE
如果不加-E 使用花括号要加 转义符\{\}
egrep 支持基础和扩展表达式
awk
#支持 egrep 所有的正则表达式
sed
#默认不支持扩展表达式
加-r 选项开启 ERE。
如果不加-r 使用花括号要加 转义符\{\}
shell文本处理三剑客 支持的特殊字符
\w ##匹配任意数字和字母,等效[a-zA-Z0-9_]
\W ##与\w 相反,等效[^a-zA-Z0-9_]
\b ##匹配字符串开始或结束,等效\<和\>
\s ##匹配任意的空白字符
\S ##匹配非空白字符
shell文本处理三剑客 支持的空白符
\n ##换行符
\r ##回车符
\t ##水平制表符
\v ##垂直制表符
\0 ##空值符
\b ##退后一格
转载请注明原文链接:shell基础之正则
共有 0 条评论