玩转linux 第五天之正则表达式

1    前言

本文档主要介绍正则表达式的含义及其常用命令使用方法,并提供相应案例解释其含义。

学习这些正则表达式是一个Linux爱好者需要具备的首要条件,让小编带领你们进入Linux的世界看看它的一颦一笑。

读者对象

本文档(本指南)主要适用于以下人员:

Linux爱好者

2     环境简介


项目


配置


硬件型号


Tinkpad T440P


CPU


I5-4210


内存


4G


操作系统


Windows 8.1


虚拟系统


Vmware workstation 11


CPU


1Core


内存


1G


操作系统


Centos 7.1

3     概述

正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。

正则表达式共分两类即:基本正则表达式(BRE)和扩展正则表达式(ERE)。大多数LINUX程序至少要符合BRE规范。

4     正则表达式

正则表达式是由元字符及正常字符书写的模式,其中的元字符不表示字符本身的意义,而是执行表达式控制或通配等功能。

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

4.1   元字符

元字符是一个或一组代替一个或多个字符的字符。听起来有点拗口,但举一个例子也许你就明白了:元字符*用来匹配0个或多个的前一字符;而元字符 . 用来匹配一个任意的一个字符。

正则表达式元字符


字符匹配:

.  任意单个字符

*  匹配其前面的字符任意次;

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

\?  匹配其左侧0次或1次

\+  其左侧字符至少出现1次

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

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

[0-9],= [[:digit:]]

[a-z]= [[:lower:]]

[A-Z],=[[:upper:]]

[a-z,A-Z]=[[:alpha:]]

[[a-z,A-Z,0-9]]=[[:alnum:]]

[“ ”]=[[:space:]] 输出空白字符

[[:punct:]]   输出标点

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

*:任意次

\?:前面的字符出现0或1次

\+ 1或多次:

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

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

\{0,n\} 至多N此

\{M,\} 至少M次

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

位置锚定

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

$: 行尾锚定:用于模式的最右边

\<:\b词首锚定:用于表示单词的模式的左侧:

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

^$:空白行

单词锚定

\<锚定词首 指定单词首部为某个指定匹配字符

\>锚定 词尾

\<pattern\>

分组牟定

\(\) \(pattern\)pattern 能够把多个字符捆绑到一起做一个字符表示

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

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

\2:  引用模式中自左到右,由第二个左括号以及与之对应的右括号中的模式所匹配的内容

...后向引用:引用前面的分组括号中的模式所匹配的字符:、

扩展表达式元字符(列出与正则表达是不同的)


?       出现了0次或1次 正则表达式为\?
{m,n}        匹配前边字符最少m次,最多n次
()            分组,用法与grep类似
a|b           二选一

4.2   基本正则表达式及命令

grep:global search REgular expression adn print out the line.作用:文本搜索工具,根据用户指定的模式逐行去搜索目标文本显示匹配的行


选项

--color=auto  高亮

[[email protected] ~]# grep ‘root‘ /etc/passwd

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

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

-i 忽略大小写

-o 仅显示能够被模式匹配到的串本身

-E 使用扩展的正则表达式

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


示例2 显示/etc/passwd文件中的两位数或三位数


cat /etc/passwd | grep "\<[0-9]\{2,3\}\>"

示例3 显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行


[[email protected] ~]# netstat -tan | grep "LISTEN[[:space:]]*$"

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN

tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN

tcp6       0      0 :::22                   :::*                    LISTEN

tcp6       0      0 ::1:631                 :::*                    LISTEN

tcp6       0      0 ::1:25                  :::*                    LISTEN

示例4 添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行


[[email protected] ~]# useradd bash

[[email protected] ~]# useradd testbash

[[email protected] ~]# useradd basher

[[email protected] ~]# useradd -s /sbin/nologin nologin

[[email protected] ~]# cat /etc/passwd | grep "^\(\<.\+\>\).*\1$"

sync:x:5:0:sync:/sbin:/bin/sync

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

halt:x:7:0:halt:/sbin:/sbin/halt

bash:x:1004:1004::/home/bash:/bin/bash

nologin:x:1008:1008::/home/nologin:/sbin/nologin

4.3   扩展正则表达式及命令

示例 5 显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)


[[email protected] ~]# egrep "^\<root\>|^\<centos\>|^\<user1\>" /etc/passwd

root:x:0:0:root:/root:/bin/bash

centos:x:1009:1009::/home/centos:/bin/bash

user1:x:1010:1010::/home/user1:/bin/bash

[[email protected] ~]# egrep "^\<root\>|^\<centos\>|^\<user1\>" /etc/passwd |cut -d ‘:‘ -f 3,7

0:/bin/bash

1009:/bin/bash

1010:/bin/bash

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


第一种 次单词为英文单词 只有字母和包含题目所说的下划线

第二种 单词包含任意 字母 数字 下划线 但首部及尾部不能出现下划线

示例 7 使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名


找出路径目录名

找出路径基名

示例 8 找出ifconfig命令执行结果中1-255之间的数字


时间: 2024-11-04 21:55:14

玩转linux 第五天之正则表达式的相关文章

《sed的流艺术之二》-linux命令五分钟系列之二十二

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 上文接:<sed的流艺术之一>-linux命令五分钟系列之二十一 5 sed中有选项么?有没有什么比较常用的? sed最主要的就是command部分,把这部分玩转了,你就已经很厉害了,而玩转这部分的前提是玩转正则表达式.尽管如此,sed的选项部分的-n选项仍然是非常重要,理解

[Linux] PHP程序员玩转Linux系列-使用supervisor实现守护进程

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 7.PHP程序员玩转Linux系列-nginx初学者引导 8.PHP程序员玩转Linux系列-Nginx中的HTTPS 首先遇到的问题

《sed的流艺术之三》-linux命令五分钟系列之二十三

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 上文接:<sed的流艺术之二>-linux命令五分钟系列之二十二 例五 给某些字符串后面插入些内容 [[email protected] programming]$ cat mysed.txt Beijing London[[email protected] programm

《sed的流艺术之一》-linux命令五分钟系列之二十一

本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. === [正文开始] 1 你想过sed为什么叫sed么? sed是stream editor的缩写,sed就是一个流编辑器,说白了,就是我们往sed里输入一串信息,它给我们处理,然后输出来.就这么简单. sed和cut类似,是一个面向行处理的工具,它以“行”为处理单位,处理后的结果会输出到标准输出.所以说其实

[Linux] PHP程序员玩转Linux系列-nginx初学者引导

1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转Linux系列-备份还原MySQL 5.PHP程序员玩转Linux系列-自动备份与SVN 6.PHP程序员玩转Linux系列-Linux和Windows安装nginx 翻译自官网文档 nginx有一个master进程和很多个worker进程.master进程的主要目的是读取和执行配置文件,维持work

初学者应该如何学习乃至玩好Linux系统呢?

我把之前的一些学习经验和方法跟大家分享下,希望对大家有所帮助: 一.玩好Linux一定要经常折腾,说白了,就是动手能力一定要强.我初学Linux那块,家里3台电脑,我在上面经常反反复复的做kickstart.网络ghost.双系统安装的实验.有很长一段时间,我还在其中的一台老式笔记本上安装了Ubuntu系统,通过它来游览网页和看视频,解决各种驱动问题,通过这些折腾,对Linux也是越来越有兴趣,学习的劲头也越来越足了. 二.床边经常放几本书,临睡觉前或无聊时经常翻一翻,我个人的感觉是夜深人静的时

玩转Linux网络namespace-单机自环测试与策略路由

上周有厂商到公司测试,拿了一块据说很猛的网络处理加速PCIe板卡,拎在手里沉甸甸的很有分量,最让人意淫的是那4个万兆光口,于是我迫不及待的想要一览光口转发时那种看不见的震撼.       可是,仅凭4个光口怎么测试?起码你要有个"对端"啊!任何人应该都不想扛着三台机器在客户们之间跑来跑去测试其转发性能,当然你也不能指望客户那里就一定有你需要的"对端"设备,比如我们公司就没有这种和万兆光口对接的设备,不过赶巧的是,那天还真有一台设备带有万兆光口,但是只是碰巧了.最佳的

Linux 的五个重启命令及具体说明

一.Linux 的五个重启命令 1.shutdown 2.poweroff 3.init 4.reboot 5.halt 二.五个重启命令的具体说明 shutdown reboot 在linux下一些常用的关机/重启指令有shutdown.halt.reboot.及init,它们都能够到达重启体系的意图,但每个指令的内部作业进程是不一样的,经过这篇文章的介绍,希望你能够愈加灵敏的运用各种关机指令. 1.shutdown shutdown命令安全地将系统关机. 有些用户会使用直接断掉电源的方式来关

玩转Linux之pwd命令

玩转Linux之pwd命令 你有没有遇到过需要知道当前所在目录却无从得知?有没有想要复制出当前所在目录层次却不知如何下手?俗话说有困难找警察,想知道目录层次自然要找pwd了.那么问题来了: 什么是pwd pwd的意思是Print Working Directory,也就是打印工作目录,意如其名,就是说打印出用户当前所在目录,它会打印出从根目录(/)开始到当前所在目录的完整路径.这条命令是一条shell的内置命令,并且在大多数shell中都可以使用,如bash.Bourne shell,ksh.z