linux 模式表达式,linux正则表达式和扩展表达式

Centos的grep的正则表达式和扩展表达式

日期2015.08.28 备注:其简述来自于马哥课堂笔记

grep

grep是一个文本过滤工具根据用户指定的“模式(pattern)”逐行去搜索目标文本,打印匹配到的行;

模式:由正则表达式的元字符及文本字符所编写的过滤条件;

其中,元字符:字符不表示其字面意义,而用于表示通配或控制功能

grep分为两类

基本的正则表达式:BRE

扩展的正则表达式:ERE

grep 使用格式

grep  [选项]   模式  [文件]

其常用选项有

--color=auto:对匹配到的串做高亮显示; 备注:--color 默认的命令别名中已经定义了grep=grep --color了

9d1797e6a64d09e1a9aa2fa9b4e3914c.png

加上--color

cd951ba80afec95d0978d976ff2657cc.png

-v:显示模式匹配不到行;

62c0b8bab13af1a169434a41c390e8f5.png

-i: 忽略字符大小写;

a21bc69382678a3210cc48a072785548.png

-o: 仅显示能够被模式匹配到的字符串;

0835e636088f5098cdf2bfc973bd50b9.png

-q: 静默模式,匹配到什么也不显示。

90b3ba2bb87d4e29c58368b0a6f29677.png

-E:使用扩展的正则表达式;这里就不发图了后面有演示。

基本正则表达式的元字符:

字符匹配:

.: 匹配任意单个字符;

d9ab5c304e45479ee5690fc2e4773b58.png

[]:匹配指定范围内的任意单个字符;下图中[a-z]和[a-c]匹配字符就不一样,因为字符范围不同

9494c5120698e045d25e7cdaf02fbede.png

[^]:匹配不在指定范围内的任意单个字符;

6478ea9f685853cc68085b1be1cd99cb.png

[:lower:]:小写字母

dd29a77c4f0eda593912644952acafb4.png

[:upper:]:大写字符

2408c4c7868d5ab8d7300c76380818a7.png

[:space:]:空白字符

dfcd7cf1b5299ed5ca77c07b5014d40d.png

[:punct:]:标点符号

b4bd9f86ea32aad89e759db1da79b789.png

[:alpha:]:大小写字母;意思是所有的字母不分大小写

f6da06dca74b30b7cc1dc930d6f4d7bd.png

[:digit:]:数字

5da6e7da942aad55fc9f29c4b709113b.png

次数匹配:用于要指定其次数的字符的后面,表示指定其前面的字符

*: 任意次

\?:0或1次

\+:1或多次

\{m\}:精确限制为m次

\{m,n\}: 至少m次,至多n次,[m,n]

\{0,n\}:至多n次,少了可以没有

\{m,\}:至少m次,多则不限

.*: 匹配任意长度的任意字符

以上命令总结如下图:

18da18bac73ab0e9b03f87e631d59c15.png

位置锚定:

^: 行首锚定;用于模式的最左侧;

f0ea476d1f44db6d00952029f70eaafc.png

$: 行尾锚定;用于模式的最右侧; 注意,在Centos7后$来锚定行尾的时候要使用单引号。

9c0c11bd1a84b5d9b27488c4fae22c76.png

\

f606f96ea6473f055422885907877c96.png

\>, \b:词尾锚定;用于表示单词的模式的右侧;

74422b2b411197a274e59a64e73e0989.png

^$: 空白行;我们使用管道和wc -l 来统计匹配到的空白行 如下图:

a63d33f937e0d56aa780da82a27373d4.png

分组:\(\)

分组的小括号中的模式匹配到的内容,会在执行过程中被正则表达式引擎记录下来,并保存内置的变量      中;这些变量分别是\1, \2, ...

\1: 从左侧起,第一个左括号,以及与之配对的右括号中间的模式所匹配到的内容;

\2:从左侧起,第二个左括号,以及与之配对的右括号中间的模式所匹配到的内容;                    ...

后向引用:使用变量引用前面的分组括号中的模式所匹配到的字符;

2c075f2873a412d707bf5e47ca8a91ca.png

扩展的正则表达式:

grep家庭有三个命令:

grep:基本正则表达式

-E: 扩展正则表达式

-F:不支持正则表达式

egrep:扩展正则表达式

fgrep:不支持正则表达式

扩展正则表达式的元字符

字符匹配:

.: 任意单个字符

[]:指定范围内的任意单个字符

[^]:不在指定范围内的任意单个字符

次数匹配:

.*:匹配任意字符

*:匹配任意字符

?:0次或1次;

+:1次以上;

{m}:精确匹配m次;

{m,n}:至少m次,至多n次;

{0,n}:至多n次,少了可以没有

{m,}:至少m次,多则不限

位置锚定:

^: 锚定行首

$: 锚定行尾

\

\>, \b:词尾锚定;用于表示单词的模式的右侧;

^$: 空白行

分组:()

后向引用:\1, \2, ...

以上扩展正则表达式和正则表达式使用方法差不多在这里就不一一截图了。

或者:

a|b

C|cat: 不表示Cat或cat,而表示C或cat;

要写成(C|c)at

说了那么多我们还是一起来做写练习吧!

使用正则表达式和扩展表达式实现以下功能:

1、显示/etc/passwd文件中以bash结尾的行;

答案如下图:

cfebe1f8846cf9301326595d765eb7d8.png

46dfceacc53986a4eac136c4278c18cd.png

扩展表达式则是,如下图:

cef9dee72fef92c160002978fe2d7e12.png

2、显示/etc/passwd文件中的两位数或三位数;如下图

275493eca0d636e906c9709251b76da1.png

扩展表达式,如下图:

f1473e631b9a32a6faea8a9ac17e97f6.png

3、显示'netstat -tan'命令结果中以‘LISTEN’后跟0个、1个或多个空白字符结尾的行;如下图:

8bde7cdcc444bbb7a87cf0fc0fd73ed0.png

扩展表达式 如下图:

e3d55854023cf035fc212c32be142b53.png

4、添加用户bash,testbash, basher以及nologin用户(nologin用户的shell为/sbin/nologin),并找出    shell和用户一样的用户

f3695e6def7dd62d9afd5f901a185089.png

扩展表达式

b396bd1b036c921e09631aaf9a4e8d3a.png

使用扩展正则表达式实现以下功能

1、显示当前系统上root、centos或user1用户的默认的shell和UID;

f59eb02941d38f745a8bf8c1a3d7ca19.png

2、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行;

d2a426201192263fcb724d2f5e0420a2.png

3、使用echo输出一个路径,而后egrep找出其路径基名;

eabc781aa7a0726825a913d02e434579.png进一步地:使用egrep取出其目录名;

e7e4f8bd4e9e1f984a889a41d1b9d556.png  4、找出ifconfig命令执行结果中1-255之间的数字;

8d3904dbde07ca6b09eee10c03107ba0.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值