基础正则表达式和扩展正则表达式

基础正则表达式:

^   第1个符号 ,以什么什么开头   ^m

$  第2个符号,以什么什么结尾  m$    ,还表示空行,或空格,可以用cat  -An 试一下

^$ 第3个符号,空行  什么符号都没有

.  第4个符号,表示任意 “一个字符”

\  第5个符号, 转义字符不解析特殊符号的含义 ,  \n 相当于回车键 ,  \t  相当于tab键

* 第6个符号,表示前一个字符连续出现了0次或0次以上

.* 第7个符号,表示任意字符,包括空行,正则表达式表示所有或连续出现的。

[ ] 第8个符号,中括号,中括号内每次查找一个字符。

[^] 第9个符号,[^acb] , 表示排除 a,b,c

扩展正则表达式:

+ 第10个符号,表示前一个字母连续出现1次或1次以上

扩展正则表达式:

+ 第10个符号,表示前一个字母连续出现1次或1次以上

|  第11个符号,(竖线)表示  " 或者 "  的意思

() 第12个符号,(小括号)表示一个整体  反向引用 / 后向引用

例如:sed  -r   's#(..)(..)(..)#\1<(\2)>\3#g'    ##后向引用

{} 第13个符号,{n,m} 前一个字符至少连续出现N次,最多连续出现m次

a{1,10}  ##表示  a最少连续出现1次,最多连续出现10次

grep 参数:

-E 等于 egerp

-n 显示行号

-i 不区分大小写

-o 只输出匹配的内容

sed 参数:

-n 指定行号

-r 支持扩展正则表达式

's#123#456#g' 表示把123 替换成456

awk 参数:

-F 指定分隔符

NR 表示行号

$ 表示取某一列

练习题1:用sed或awk取出服务器eth0的IP地址。

1、用sed取出服务器eth0的ip地址

[[email protected] ~]# ifconfig eth0 ###查看服务器的IP

eth0      Link encap:Ethernet  HWaddr 00:0C:29:FB:AD:B8

inet addr:192.168.11.138  Bcast:192.168.11.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6661195 errors:0 dropped:0 overruns:0 frame:0

TX packets:6770 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:8342856346 (7.7 GiB)  TX bytes:1103955 (1.0 MiB)

[[email protected] ~]# ifconfig eth0|sed -nr '2s#^.*addr:(.*).*Bcast.*$#\1#gp' ### \1 表示前一个()内的内容,就是我们要取出的内容

192.168.11.138

###############备注######################

|sed -nr '2s#^.*addr:(.*).*Bcast.*$#\1#gp'   等于  |sed -n 2p|sed -r 's#^.*addr:(.*).*Bcast.*$#\1#g'

#########################################

2、用awk取出服务器eth0的ip地址

[[email protected] ~]# ifconfig eth0 ###查看服务器的IP

eth0    Link encap:Ethernet  HWaddr 00:0C:29:FB:AD:B8

inet addr:192.168.11.138  Bcast:192.168.11.255  Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fefb:adb8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:6665321 errors:0 dropped:0 overruns:0 frame:0

TX packets:6772 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:8347065816 (7.7 GiB)  TX bytes:1104075 (1.0 MiB)

[[email protected] ~]# ifconfig eth0|awk -F '[ :]+' 'NR==2{print $4}' ###注意:'[ :]' 中括号内一个字符是空格!!!

192.168.11.138

###############备注######################

|awk -F '[ :]+' 'NR==2{print $4}' 等于 |awk NR==2|awk -F '[ :]+' '{print $4}'

#########################################

练习题2:用awk或sed 取出 /etc/hosts 文件的权限(以数字的形式显示)

1、用awk取 /etc/hosts 文件的权限

[[email protected] ~]# stat /etc/hosts ####首先查看hosts文件的权限,权限为:0644

File: `/etc/hosts'

Size: 476        Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d Inode: 786460      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2018-04-05 17:00:16.938264330 +0800

Modify: 2018-04-05 16:59:22.926263885 +0800

Change: 2018-04-05 16:59:22.926263885 +0800

[[email protected] ~]# stat /etc/hosts|awk -F '[(/]' 'NR==4{print $2}' ###以(和/ 为分隔符,将第四行的第二列取出

0644

###############备注######################

|awk -F '[(/]' 'NR==4{print $2}' 等于 |awk NR==4|awk -F '[(/]' '{print $2}'

#########################################

2、用sed取 /etc/hosts 文件的权限

[[email protected] ~]# stat /etc/hosts ####首先查看hosts文件的权限,权限为:0644

File: `/etc/hosts'

Size: 476        Blocks: 8          IO Block: 4096   regular file

Device: 802h/2050d Inode: 786460      Links: 1

Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)

Access: 2018-04-05 17:00:16.938264330 +0800

Modify: 2018-04-05 16:59:22.926263885 +0800

Change: 2018-04-05 16:59:22.926263885 +0800

[[email protected] ~]# stat /etc/hosts|sed -nr '4s#^.*\(('[0-9]+')/-.*$#\1#gp' ### \1 表示前一个()内的内容,就是我们要取出的内容

0644 ### \( 表示取消 ( 的特殊含义

###############备注######################

|sed -nr '4s#^.*\(('[0-9]+')/-.*$#\1#gp' 等于 |sed -n 4p|sed -r 's#^.*\(('[0-9]+')/-.*$#\1#g'

#########################################

原文地址:http://blog.51cto.com/zhuzhiwei/2096546

时间: 2024-10-15 01:05:34

基础正则表达式和扩展正则表达式的相关文章

正则表达式和扩展正则表达式

正则表达式和扩展正则表达式   先了解下基础概念:字符是计算机软件处理文字时最基本的单位,可能是字母,数字,标点符号,空格,换行符,汉字等等.字符串是0个或更多个字符的序列.文本也就是文字,字符串.说某个字符串匹配某个正则表达式,通常是指这个字符串里有一部分(或几部分分别)能满足表达式给出的条件.  正则表达式:是指一个用来描述或者匹配一系列符合某个句法规则的字符串的单个字符串.vim.grep.awk .sed 等工具都支持正则表达式,本文介绍如何使用grep及egrep命令.而扩展正则表达式

grep、正则表达式和扩展正则表达式的理解及运用

grep.正则表达式和扩展正则表达式的理解及运用 一 .grep的基本含义 我们可以从命令man grep中看到gerp命令的帮助文档,从中我们可以得出grep.egrep.fgrep都是文本搜索工具,根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,显示能匹配到的. grep有三种变形:   grep:标准grep命令,支持基本正则表达式   egrep:扩展grep命令,支持基本及扩展的正则表达式   fgrep:fastgrep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅

OSIX基本正则表达式和扩展正则表达式的比较

POSIX基本正则表达式和扩展正则表达式的比较 在读者正觉得正则表达式已经复杂得不能再复杂时,又会发现POSIX规范将正则表达式的实现方法分为了两种:基本正则表达式(BRE)和扩展正则表达式(ERE).到目前为止,我们所讨论的正则表达式的所有特性,都得到了兼容POSIX的应用程序的支持,并且都是以BRE的方式实现.grep命令就是这样的一个例子. BRE和ERE到底有什么区别?其实仅仅是元字符的不同!在BRE方式中,只承认^ .$. . .[ .] .*这些是元字符,所有其他的字符都被识别为文字

基本正则表达式与扩展正则表达式

什么是正则表达式 通过符号.符号与字母数字的组合,来描述文本的特征.这些字符不代表字符原本的意义,而是表示控制和通配.这此符号和符号与字母的组合称为元字符. 为什么要用正则表达式,用在什么地方. 正则表达式可以匹配一段文本的特征,比如年月日,空白行,单词,一行文本,IP地址等.这样可以根据某些文本,然后查找到那些文件中包含了这些内容.还可以根据这些特征找到的文本进行复制,删除,替换,或者赋值给一个变量等.很多编程语言都支持正则表达式,它们可能支持的正则表达式引擎不同,表示方法略有不同.vi,gr

POSIX基本正则表达式和扩展正则表达式的比较

POSIX基本正则表达式和扩展正则表达式的比较 在读者正觉得正则表达式已经复杂得不能再复杂时,又会发现POSIX规范将正则表达式的实现方法分为了两种:基本正则表达式(BRE)和扩展正则表 达式(ERE).到目前为止,我们所讨论的正则表达式的所有特性,都得到了兼容POSIX的应用程序的支持,并且都是以BRE的方式实现.grep命令就 是这样的一个例子. BRE和ERE到底有什么区别?其实仅仅是元字符的不同!在BRE方式中,只承认^ .$. . .[ .] .*这些是元字符,所有其他的字符都被识别为

linux基础篇-12,grep正则表达式与扩展正则表达式

################################################ 基本正则表达式:grep 使用正则表达式定义的模式来过滤文本 grep -i :不区分大小写 --color -v:显示没被匹配的任意行 -o:只显示被匹配的字符串 -E 扩展的正是表达式 =egerp -A#:#为数字 -B#: -C#: [[email protected] testcp]# grep -o 'root' /etc/passwd --color root root root ro

正则表达式与扩展正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个"规则字符串",这个"规则字符串"用来表达对字符串的一种过滤逻辑.通常被用来检索.替换那些符合某个模式(规则)的文本.其主要应用对象是文本,因此它在各种文本编辑器场合都有应用. 贪婪模式与懒惰模式 正则表达式默认的情况下,会在满足匹配条件下尽可能的匹配更多内容.如 a.*b,用他来匹配 aabab ,它会匹配整个 aabab ,而不会只匹配到 aab 为止,这就是贪

Linux下元字符、正则表达式、扩展正则表达式应用

Linux下通配符  常用来搜索文件ls,find 符号        意义 *           代表任意长度的任意字符 ?           代表任意单个字符 []          代表指定范围内的任意单个字符 [-]         如[a-z]代表a-z内的任意单个字符 [^]         指定范围外的任意单个字符 Linux下元字符 #     注释符号,常使用在脚本当中 \     转义字符,将"元字符或通配符"还原成一般字符, |     管道,可以将管道左边的

学习了一些正则表达式(扩展正则表达式)

最近学这个文本相关的命令行,发现难度突然就上升了很多,每个命令的相关选项都非常多,不多打几次很难记住,记住了隔天也印象消退不少,所以暂时对记住这些选项有点想法,我想先放下,能理解就理解,以后用的多了也就记住了然后下面是一些最近学的正则表达式的理解 正则表达式(扩展,就是少了一些分隔符\)abc 表示ab+任意个c. 表示任意个任意字符 abc? 表示ab+0或者1个cabc+ ab+最少一个ca{n} n个a(abc){n} n个a,b,ca{n,} n个以上的aa(,n) 任意个到n个的aa{