16 - shell之正则表达式

什么是正则表达式

  • Regular Expression
    • 描述一个字符集和的表达方式
    • 模糊匹配

基本正则表达式

正则符号 描述
abc 匹配abc
^ 匹配开头
$ 匹配结尾
[集合] 匹配集合中任意单个字符
[^集合] 对集合取反
. 匹配任意单个字符
* 匹配前一个字符任意次(包含0次)
.* 匹配任意
{n,m} 匹配前一个字符n到m次
{n,} 匹配一个字符至少n次
{n} 匹配前一个字符n次
grep root /etc/passwd
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_cvmsroot:*:212:212:CVMS Root:/var/empty:/usr/bin/false

grep ^root /etc/passwd
root:*:0:0:System Administrator:/var/root:/bin/sh

grep bash$ /etc/passwd
_mbsetupuser:*:248:248:Setup User:/var/setup:/bin/bash

grep "[abc]" /etc/passwd
grep "[^abc]" /etc/passwd
grep "[0-9]*" /etc/passwd
grep "[0-9]\{3,4\}" /etc/passwd
grep "[0-9]\{3\}" /etc/passwd

扩展正则

  • 扩展正则符号
正则符号 描述
+ 匹配前面的字符至少一次
? 匹配前面的字符0次或1次
() 组合与保留
"竖线" 或者
{m,n} 匹配前面的字符m到n次
{n,} 匹配前字符至少n次
{n} 匹配前面的字符n次
grep -E "0{2,3}" /etc/passwd
_softwareupdate:*:200:200:Software Update Service:/var/db/softwareupdate:/usr/bin/false

grep -E "[a-z]+" /etc/passwd
 grep -E "s?bin" /etc/passwd
grep -E "(root|daemon)" /etc/passwd

echo "ababab" |grep -E "(ab){2}"
ababab

Perl兼容的正则符号

正则符号 描述
\b 匹配单词边界
\w 匹配字符数字下划线
\W 和\w相反
\s 匹配空白
\d 匹配数字
\d+ 匹配多个数字
\D 匹配非数字
grep -P "\bbin\b" /etc/passwd

grep语法格式

  • 用法:grep [选项] 匹配模式 [文件]
  • 常用选项:
选项 说明
-i 忽略大小写
-v 取反匹配
-w 匹配单词
-q 静默匹配,不将结果显示在屏幕

小结

  • 基本正则:,$,[],[],.,*,{n,m}
  • 扩展正则:+,?,(),|,{}
  • Perl兼容的正则:\b,\d,\s,\w
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容