欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Linux下正则表达式基本和扩展命令的详细介绍

来源:本站整理 作者:佚名 时间:2017-01-11 TAG: 我要投稿

正则表达式应用广泛,在绝大多数的编程语言都可以完美应用,在Linux中,也有着极大的用处。
使用正则表达式,可以有效的筛选出需要的文本,然后结合相应的支持的工具或语言,完成任务需求。
在本篇博客中,我们使用grep/egrep来完成对正则表达式的调用,其实也可以使用sed等工具,但是sed的使用极大的需要正则表达式,为了在后面sed篇的书写,就只能这样排序了,有需要的朋友可以把这两篇一起来看。
正则表达式的类型
正则表达式可以使用正则表达式引擎实现,正则表达式引擎是解释正则表达式模式并使用这些模式匹配文本的基础软件。
在Linux中,常用的正则表达式有:
- POSIX 基本正则表达式(BRE)引擎
- POSIX 扩展正则表达式(BRE)引擎
基本正则表达式的基本使用
环境文本准备
[root@service99 ~]# mkdir /opt/regular
[root@service99 ~]# cd /opt/regular
[root@service99 regular]# pwd
/opt/regular
[root@service99 regular]# cp /etc/passwd temp_passwd
纯文本
纯文本可以完全匹配对应的单词,需要注意的有正则表达式模式严格区分大小写。
//grep --color 主要是可以将匹配到的文本高亮显示,这样便于观察效果
[root@service99 regular]# grep --color "root" temp_passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
在正则表达式中,不必局限于完整的单词,所定义的文本出现在数据流的任意位置,正则表达式都将匹配。
[root@service99 regular]# ifconfig eth1 | grep --color "add"
eth1  Link encap:Ethernet HWaddr 54:52:01:01:99:02
   inet addr:192.168.2.99 Bcast:192.168.2.255 Mask:255.255.255.0
   inet6 addr: fe80::5652:1ff:fe01:9902/64 Scope:Link
当然也不必局限于单独的单词,也可以在文本字符串中出现空格和数字。
[root@service99 regular]# echo "This is line number 1" | grep --color "ber 1"
This is line number 1
特殊字符
在正则表达式模式中使用文本字符串时,有一个问题需要注意。
在正则表达式中定义文本字符串时有几个例外,正则表达式赋予了它们特殊的含义,如果在文本中使用这些特殊字符,有可能得不到预期的效果。
正则表达式认可的特殊字符:
 
复制代码代码如下:
 .*[]^${}+?|()
 
如果想要使用这些特殊字符作为普通的文本字符,就需要转义(escape)它,即是在该字符前添加一个特殊字符,向正则表达式引擎说明:它应该将下一个字符解释为普通文本字符。
实现该功能的特殊字符是:“\”反斜杠字符
[root@service99 regular]# echo "This cat is $4.99" //双引号不会屏蔽特殊符号,所以系统会读取变量4.99的值,然而当前系统并没有该变量,就显示为空
This cat is .99
[root@service99 regular]# echo "This cat is \$4.99" //使用"\"转义$
This cat is $4.99
[root@service99 regular]# echo 'This cat is \$4.99' //单引号屏蔽元字符$
This cat is \$4.99
[root@service99 regular]# echo 'This cat is $4.99'
This cat is $4.99
[root@service99 regular]# cat price.txt
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
[root@service99 regular]# grep --color '\\' price.txt
This is "\".
定位符
从头开始
脱字符(^)尖角号定义从数据流中文本行开头开始的模式。
[root@service99 regular]# grep --color '^h' price.txt //以字母h开头的行
hello,world!
[root@service99 regular]# grep --color '^$' price.txt //无输出结果,由于没有屏蔽特殊含义
[root@service99 regular]# grep --color '^\$' price.txt  //以$符号开头的行
$5.00
[root@service99 regular]# echo "This is ^ test. " >> price.txt
[root@service99 regular]# cat price.txt
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
This is ^ test.
[root@service99 regular]# grep --color '^' price.txt //直接使用会显示所有的内容
This price is $4.99
hello,world!
$5.00
#$#$
This is "\".
This is ^ test.
[root@service99 regular]# grep --color '\^' price.txt //单独使用,并在最前面时需要屏蔽
This is ^ test.
[root@service99 regular]# grep --color 'is ^' price.txt //符号不在最前面时,无需屏蔽,直接使用即可
This is ^ test.
查找结尾
美元符号$特殊字符定义结尾定位,在文本模式之后添加这个特殊字符表示数据行必须以此文本模式结束。
[root@service99 regular]# grep --color '\.$' price.txt //“.”在正则表达式中也有特殊含义,请屏蔽,具体的请往下看
This is "\".
[root@service99 regular]# grep --color '\. $' price.txt //由于我在输入的时候,多加了一个空格,所以各位需要慎重和小心
This is ^ test.      //在正则表达式中,空格作为字符计。
[root@service99 regular]# grep --color '0$' price.txt
$5.00
[root@service99 regular]# grep --color '9$' price.txt
This price is $4.99
联合定位
比较常用的就是“^$” 表示空行
结合“^#”,由于#在Linux代表注释
输出该文本的有效配置
[root@service99 regular]# cat -n /etc/vsftpd/vsftpd.conf | wc -l
121
[root@service99 regular]# grep -vE '^#|^$' /etc/vsftpd/vsftpd.conf //v表示反选,E表示支持扩展正则“|”是扩展正则的符号,往下看,后面有
anonymous_enable=YES
local_enable=YES

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载