DevOps 正则表达式

shanz · November 10, 2019 · 9 hits

 正则表达式应用非常广泛,存在于各种语言中,例如:java,PHP,Python 等,但是我们这里说的正则表达式是 Linux 系统运维工作中的正则表达式,即:Linux 正则表达式,最常用的正则表达式的命令就是 grep(egrep),sed,awk,换句话说 Linux 三剑客要想能工作的更高效,那一定离不开正则表达式的配合。
 注意:正则表达式和我们常用的通配符特殊字符有本质的区别,通配符例子:ls .log 这里的就是通配符(表示所有),不是正则表达式。
 注意事项:

  • linux 正则一般以行为单位匹配处理的
  • alia grep=’grep –color=auto’ , 这样匹配到的字符可以高亮显示
  • c.注意字符集,export LC_ALL=C

2.语法

2.1^开头,$ 结尾(匹配空行)

1
[root@linux-study cys_test]# cat test.txt|grep "^$"

2.2 点 (.) 表示只能代表任意一个字符

1
不会匹配到空行(但是会匹配到空字符串)

2.3 转义字符

12
例如:. 表示的是“.”这个字符  $ 表示的是“$”这个字符

2.4 重复前面的 0 个或者多个字符

<a href="#2-5-表示匹配所有字符" class="headerlink" title="2.5 . 表示匹配所有字符">2.5 .* 表示匹配所有字符

12
^.:以任意多个字符开头
.$:以任意多个字符结尾

2.6.[0-9A-Za-z]

12
匹配字符集内任意一个字符[^0-9A-Za-z] 不包含其中的任意字符,注意^(表示以。。开头)和[^]的区别

2.7 a{n,m}

123
重复前面一个字符(这里是字符:a)n到m次,如果用egrep或者sed -r 可以不用转义a{n,} : 表示至少重复a字符n次a{n} : 表示重复a字符n次

2.8+ 匹配一次或者多次

1
sa-6+匹配sa-6、sa-666,不能匹配sa-

2.9()组

12
匹配表达式,创建一个用于匹配的子串,这个组后面可以使用到(1表示第一个分组)ma(tri)?匹配max或maxtrix

2.10 | 两边任意一项

12
交替匹配|两边的任意一项ab(c|d)匹配abc或abd

2.11 ?

1
重复0个或者一个前面的字符

2.12 扩展正则

1
使用egrep 或者是 grep -E

3.元字符

元字符(meta character)是一种 Perl 风格的正则表达式,只有一部分文本处理工具支持它,并不是所有的文本处理工具都支持。

正则表达式 描述 示例
b 单词边界 bcoolb 匹配 cool,不匹配 coolant
B 非单词边界 coolB 匹配 coolant,不匹配 cool
d 单个数字字符 bdb 匹配 b2b,不匹配 bcb
D 单个非数字字符 bDb 匹配 bcb,不匹配 b2b
w 单个单词字符 (字母,数字,_) w 匹配 1 或者 a, 不匹配&
W 单个非单词字符 W 匹配&,不匹配 1 或 a
n 换行符 n 匹配一个新行
s 单个空白字符 xsx 匹配 x x, 不匹配 xx
S 单个非空白字符 xSx 匹配 xkx, 不匹配 x x
r 回车 r 匹配回车
t 横向制表符
v 垂直制表符
f 换页符

4.通配符 (区别于正则的存在)

1234567891011121314151617181920
:代表0或多个字符?:代表任意1个字符;:连续不同命令的分隔符#:配置文件注释|:管道~:用户的家目录-:上一次的目录$:变量前需要加的符号/:路径分隔符>或1>:重定向>>:追加重定向;< (输入重定向);<<(追加输入重定向)‘:带引号,不具有变量置换功能,输出时所见即所得“:双引号,具有变量置换功能,解析变量后输出
:tab建上面的键,反引号,两个`中间为命令,会先执行,等价$(){}:中间为命令块组合或内容序列!:逻辑运算中的“非”(not)&&:当前一个指令执行成功时,执行后一个指令||:当前一个指令执行失败时,执行后一个指令..:上一级目录.:当前目录

举例

1234567891011121314151617181920212223242526272829303132333435363738394041
#1{}[root@lamp01 chenyansong]# touch {a,b,c}.log[root@lamp01 chenyansong]# ll总用量 4-rw-r--r-- 1 root root    0 2月  14 10:06 a.log-rw-r--r-- 1 root root    0 2月  14 10:06 b.log-rw-r--r-- 1 root root    0 2月  14 10:06 c.logdrwxr-xr-x 2 root root 4096 2月  13 19:37 etc#2.[root@lamp01 chenyansong]# ls *.loga.log  b.log  c.log#3.?[root@lamp01 chenyansong]# ls -l ?.log-rw-r--r-- 1 root root 0 2月  14 10:06 a.log-rw-r--r-- 1 root root 0 2月  14 10:06 b.log-rw-r--r-- 1 root root 0 2月  14 10:06 c.log#4.反引号,双引号,单引号[root@lamp01 chenyansong]# echo datedate[root@lamp01 chenyansong]# echo "date"date#反引号解析命令[root@lamp01 chenyansong]# echo date
2017年 02月 14日 星期二 10:09:20 CST[root@lamp01 chenyansong]# a="test"#双引号解析变量[root@lamp01 chenyansong]# echo "$a"test#单引号原样输出[root@lamp01 chenyansong]# echo '$a'$a
No Reply at the moment.
You need to Sign in before reply, if you don't have an account, please Sign up first.