码迷,mamicode.com
首页 > 系统相关 > 详细

linux正则表达式

时间:2019-02-02 23:06:23      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:运算   打印   而不是   扩展   含义   ===   功能   cst   常用   

linux正则表达式

1、什么是正则表达式?

简单的说,正则表达式就是为处理大量的字符串而定义的一套规则和方法。
例如:假设“@”代表syz1,“!”代表syz2,echo"@!"===“syz1syz2”
通过定义的这些特殊符号的辅助,系统管理员就可以快速过滤,替换或输出需要的字符串。
linux正则表达式一般以“行”为单位处理的。

2、为什么要学会正则表达式?

在企业工作中,我们每天做的linux运维工作中,时刻都会面对大量带有字符串的文本配置、程序、命令输出及日志文件等,而我们经常会有迫切的需要,从大量的字符串内容中查找符合工作需要的特定的字符串,这就是正则表达式,因此可以说正则表达式就是为了过滤这样的字符串的需求而生的。

3、容易混淆的两个注意事项:

a、正则表达式应用非常广泛,存在于各种语言中,例如:php,Python、Java等,但是,我们讲的是linux系统运维工作中的正则表达式,即linux正则表达式,最常应用正则表达式的命令就是grep(egrep),sed,awk,换句话说linux三剑客要想能工作的更高效,那一定离不开正则表达式配合的。

b、正则表达式和我们常用的通配符特殊字符是有本质区别的,这一点伙伴们要注意。通配符例子:ls *.log 这里的*就是通配符(表示所有),不是正则表达式。

一:基础正则

表达式 含义
^ ^word表示匹配以word开头的内容(打印的是一行内容),vi/vim 编辑器里^代表一行的开头
$ word$表示匹配word结尾的内容(打印的是一行内容),vi/vim编辑器里$代表一行的结尾
^$ 表示空行
. 代表且只能代表任意一个字符
\ \.就只代表点本身,转义符号,让有着特殊身份意义的字符,脱掉马甲,还原原形
* 重复0个或多个前面一个字符,例如:0*,有1个0或多个000000
.* 匹配所有字符,延伸^.*以任意多个字符开头,.*$以任意多个字符结尾
[abc] 匹配字符集合内的任意一个字符[a-zA-Z],[0-9](单个字符而不是包含的单词)
[^abc] 匹配不包含^后的任意一个字符的内容(单个字符而不是包含的单词);其中括号里^为取反,注意和中括号内以^开头区别
a\{n,m\}

重复n到m次,前一个重复的字符,如果用egrep/sed -r可以去掉斜线;

例子:gerp "0\{3,4\}" syz.log  意思为,0匹配,3-4次

         my qq name is 49000448

         not 490000048

a\{n,\} 重复至少n次,前一个重复的字符,如果用egrep/sed -r 可以去到斜线
a\{n\}

重复n次,前一个重复的字符,如果用egrep/sed -r 可以去掉斜线

例子:gerp "0\{3\}" syz.log  意思为,0匹配,3次

         my qq name is 49000448

a\{,m\}

????Centos5不能用,Centos6、7可以用

例子:gerp "0\{3\}" syz.log  意思为,0匹配,3次

         my qq name is 49000448

注意:

egrep(grep -E)或sed -r 过滤一般特殊字符可以不转义(即不用\)。

例如egrep(grep -E) "0{3}" syz.log

点(.)的含义小结:

1、当前目录
2、使得文件生效相当于source
3、隐藏文件
4、任意一个字符(grep正则)

扩展的正则表达式:

1、+ 表示重复“一个或一个以上”前面的字符(*是0或多个)
例子:[root@syz ~]# cat syz.txt
my god ,i am syz
gd
good
[root@syz ~]# egrep "g+d" syz.txt
gd
[root@syz ~]# egrep "go+d" syz.txt
my god ,i am oldboy
good
[root@syz ~]# egrep "go*d" syz.txt
my god ,i am syz
gd
good

2、? 表示重复“0个或一个”前面的字符(.是有且只有一个)
例子:
[root@syz ~]# cat syz.txt
my god ,i am syz
gd
good
goood
[root@syz ~]# egrep "go?d" syz.txt
my god ,i am syz
gd
[root@syz ~]# egrep "go.d" syz.txt
good
3、| 表示同时过滤多个字符串
例子:
[root@syz ~]# egrep "god|good" syz.txt
my god ,i am syz
good
4、() 分组过滤(少用),后向引用(主用)
例子:
[root@syz ~]# egrep "g(la|oo)d" syz.txt
good
glad

元字符:
\b 单词边界
例子:
[root@syz ~]# grep "syz" syz.txt
my god ,i am syz
syz1
[root@syz ~]# grep "\bsyz\b" syz.txt
my god ,i am syz

通配符

通配符一般用户命令行bash环境,而linux正则表达式用于grep/sed/awk场景;

linux通配符和三剑客(grep/awk/sed)正则表达式是不一样的,因此,代表的意义也是有较大区别的。

通配符 含义
* 通配符,代表所有(0到多个)字符

通配符,代表任意1个字符

例子:ls ????.txt  会匹配4个字符如test.txt

         ls ?.txt     会匹配1个字符如t.txt

连续不同命令的分隔符(两个命令的分隔符)
# 配置文件注释(就是让其命令失效,但可以给管理员看到)
| 管道
~ 当前用户的家目录
- 上一次所在的目录(路径)
$

变量前需要加的符号

例子:[root@syz test]# echo $LANG

         en_US.UTF-8

/ 路径分隔符号,也是根的意思
>或1> 重定向,覆盖原有数据
>> 追加重定向,追加内容文件尾部
< 输入重定向(xargs,tr)
<< 追加输入重定向

单引号,不具有变量置换功能,输出时所见即所得

例子:[root@syz test]# echo ‘date‘

date

"

双引号,具有变量置换功能,解析变量后输出,不加引号相当于双引号,常用双引号

例子:[root@syz test]# echo "`date`"

         Fri Jul 20 20:11:49 CST 2018

         [root@syz test]# echo "$(date)"

         Fri Jul 20 20:12:44 CST 2018

 `  tab键上面的键,反引号,两个``中间为命令,会先执行,等价于$()
 {}

 中间为命令区块组合或内容序列

例子:[root@syz test]# echo syz{1,2,3}

         syz1 syz2 syz3

 !  逻辑运算中的“非”(not)
 &&  (and)并且,两边条件同时满足,当前一个指令执行成功时,执行后一个指令
 ||  (or)或者,当前一个指令执行失败时,执行后一个指令
 ..  两个点代表上一级目录
 .  点代表当前目录

linux正则表达式

标签:运算   打印   而不是   扩展   含义   ===   功能   cst   常用   

原文地址:https://www.cnblogs.com/LEO00/p/10349355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!