linux基础之正则表达式

正则

正则表达式

作用:用来进行行文本匹配的工具[grep、sed、awk、vim、less、nginx、varnaish]
基本正则匹配选项必须用”“起来:
  • <^> 匹配字符串的开始
  • <$> 匹配字符串的结束。
  • <.>匹配除了换行符任意字符
  • <+> 匹配重复1次或更多次
  • <?>重复0次或1次
  • {n} 重复n次
  • {n,} 重复n次或更多次
  • {n,m} 重复n到m次
  • \<或者\b 词首锚定 >或者\b词尾锚定
  • (xxx) 分组:将一个或多个字符绑定在一起进行处理注意匹配到的(内容而非正则本身)会被正则表达式引擎记录与内部变量中,可被后续调用\1,\2
  • | 或者:a|b a或b
  • [:alnum:] 字母和数字
  • [:alpha:] 任何大小写字符A-Z a-z
  • [:digit:] 十进制数[:xdigit:] 十六进制
  • [:lower:] 小写字母 [:upper:] 大写字母
  • [:blank:] 空白字符(空格和制表符)
  • [:space:] 水平和垂直的空白字符
  • [:punct:] 标点符号
  • [任意要匹配的字符] 会递归取出
注意:通配符不支持[:xxx:]这种格式
扩展正则:匹配选项必须用”“起来
  • <\b>单词的开头或结尾,单词的分界处。举例:hi后面跟着lucy,\bhi\b.*\blucy\b \bx{n次}\b
  • <*>匹配任意次0次或多次,前面的内容可以连续重复使用任意次以使整个表达式得到匹配
  • <\d>匹配一位数字,为了避免重复可以使用\d{n}必须连续重复n次–只有python正则支持
  • <\w> 匹配字母或数字或下划线或汉字。
  • <\s> 匹配任意的空白符-
  • <^> 匹配字符串的开始
  • <$> 匹配字符串的结束。
  • <.>匹配除了换行符任意字符
  • <+> 匹配重复1次或更多次
  • <?>重复0次或1次
  • {n} 重复n次
  • {n,} 重复n次或更多次
  • {n,m} 重复n到m次
  • [任意要匹配的字符] 会递归取出
注意:与基本正则基本相同,只不过一些特殊符号不用再使\进行转义,当然有些特例:单词锚定和分组的后向引用仍需要\b \< \1.

举例&作业:
Windows\d+匹配Windows后面跟1个或更多数字
匹配电话号码:虽然可以匹配到,但是有一部分不是我们想要的结果所以可以用下面的分支条件来解决
[root@station88 src]# egrep ‘\(?[0-9]{3}[)-]?[0-9]{8}’ test.txt
233-39432434
(010)66513114
022-22333434
010)12345678
(022-66513115
作业:
1、显示三个用户root、mage、wang的UID和默认shell
[root@localhost lee]# cut -d: -f1,3,7 –output-delimiter = /etc/passwd|egrep “root|mage|wang”
root=0=/bin/bash
mage=515=/bin/bash
wang=516=/sbin/nologin
2、找出/etc/rc.d/init.d/functions文件中行首为某单词(包 括下划线)后面跟一个小括号的行
[root@localhost lee]# egrep “^[[:alpha:]].*[[:punct:]]*\(\)” /etc/rc.d/init.d/functions
fstab_decode_str() {
checkpid() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
status() {
echo_success() {
echo_failure() {
echo_passed() {….
3、使用egrep取出/etc/rc.d/init.d/functions中其基名
[root@localhost lee]# echo /etc/rc.d/init.d/functions |egrep -o “\b[[:alpha:]]*\b$”
functions
4、使用egrep取出上面路径的目录名
[root@localhost lee]# echo /etc/rc.d/init.d/functions |egrep -o “([[:punct:]]).*\1”
/etc/rc.d/init.d/
5、统计last命令中以root登录的每个主机IP地址登录次数
[root@localhost lee]# last |grep “root” |tr -s ” “|cut -d\ -f1,3 |sort |uniq -c|sort -nr
26 root 192.168.162.1
4 root :0.0
3 root pxe31.magelinux.
2 root pxe73.magelinux.
2 root :0
1 root 172.16.253.31
1 root 172.16.252.41
1 root 172.16.252.1
6、利用扩展正则表达式分别表示0-9、10-99、100-199、 200-249、250-255
#echo {1..255} > 1.txt
#egrep -o “\b[0-9]\b” 1.txt
#egrep -o “\b[0-9]{2}\b” 1
#egrep -o “\b[0-9]{2}\b” 1 |less
#egrep -o “\b1[0-9]{2}\b” 1 |less
#egrep -o “\b2[0-4][0-9]\b” 1 |less
#egrep -o “\b25[0-5]\b” 1 |less
7、显示ifconfig命令结果中所有IPv4地址
8、将此字符串:welcome to magedu linux 中的每个字符 去重并排序,重复次数多的排到前面
[root@localhost lee]# echo “welcome to magedu linux”|egrep -o “[[:alpha:]]”|sort|uniq -c|sort -nr
3 e
2 u
2 o
2 m
2 l
1 x
1 w
1 t
1 n
1 i
1 g
1 d
1 c
1 a
分支条件:
如果满足其中任意一种规则都应当成功匹配,使用方法用|把不同的规则分隔开。
[root@station88 src]# egrep ‘\([0-9]{3}\)[0-9]{8}|^[0-9]{3}-[0-9]{8}’ test.txt
233-39432434
(010)66513114
022-22333434
分组:过滤ip地址(搞定部分)
ifconfig eth0|egrep -o “([0-1][0-9][0-9]|2[0-5][0-4])\.([0-1][0-9][0-9]|2[0-5][0-4])\.([0-1][0-9][0-9]|2[0-5][0-4])\.([0-1][0-9][0-9]|2[0-5][0-4])”(分组引用为匹配结果的引用而非规则本身)
简化:ifconfig eth0|egrep -o “([0-1][0-9][0-9].|2[0-5][0-4].){3}[0-1][0-9][0-9]|2[0-5][0-4]”
反义:
* \W匹配任意不是字母数字下划线汉字的字符。
* \S匹配任意不是空白符的字符
* \D匹配任意非数字的字符
* \B匹配不是单词开头或结束的位置
* [^x]匹配除了x以外的任意字符
* [^aeiou]匹配除了aeiou这几个字母以外的任意字符。
* 举例:
* [root@station88 src]# egrep ‘^[^0-9].*[^0-9]$’ test.txt
* h,hihihihihiLucy
* iiiiiii
向后引用:
* 使用()指定一个分组后,默认分组会自动拥有一个组号,1….
* 向后引用用于重复搜索前面某个分组匹配的文本。\1匹配分组1
* 例如:\b(w+)\b\s+\1\b 可匹配重复的单词go go go
* 也可以指定表达式的组名。(?<world>\w+)=(?’world’\w+),将祖名指定为world–实验失败
断言:
* 概念:像\b,^,$这样用于指定一个位置,这个位置满足一定过的条件。

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/86949

(5)
上一篇 2017-09-11 18:16
下一篇 2017-09-11 21:04

相关推荐

  • iptables

    iptables: Firewall:隔离工具;Packets Filter Firewall;工作于主机或网络的边缘,对经由的报文根据预先定义的规则(匹配条件)进行检测,对于能够被规则匹配到的报文实行某预定义的处理机制的一套组件; 硬件防火墙:在硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现;  软件防火墙:应用软件处理逻辑运行于通用硬…

    Linux干货 2016-12-05
  • 二.Linux博客-2016年7月21日screen、echo

    格式说明: 操作 概念 命令 说明及举例 二.screen、echo internet 因特网ethernet 以太网ctrl+alt+F1 图形界面ctrl+alt+F2-F6 字符界面 命令:who am i/who/who me i/tty/df/ifconfig/w/ halt 关机 reboot&n…

    Linux干货 2016-08-24
  • zabbix部署(Linux上部署/监控端/被监控端)

    zabbix部署 一、监控系统的简单介绍 (1)cacti:存储数据能力强,报警性能差 (2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中。比如,连续采样数据存储,有连续三次不在合理范围内的数据就报警 (3)zabbix:结合上面两种工具的优点,又可以存储数据,又可以报警 二、zabbix特性 (1)数据采…

    Linux干货 2017-01-06
  • Python from entry to abandon 3

        第十章的内容是解决问题————编写一个Python脚本。在我的电脑上因为Zip命令不能正常工作所以无法给出演示。该章给出了很有意义的编程思路,对以后学习和工作都有不错的参考意义,这部分有兴趣的同学还是自己去看原版教程吧。    这篇博客结合个人笔记整理了《简明Python教程》第十一章到第十…

    Linux干货 2017-04-07
  • SELinux在httpd服务端中的使用

    一、启用SELinux策略并安装httpd服务,改变网站的默认主目录为/website,添加SELinux文件标签规则,使网站可访问(以CentOS7系统操作) 1、首先查看本系统是否已经安装httpd服务 2、查看httpd的配置文件所在路径 3、创建主目录为/website与网页文件"index.html",并更改httpd服务为该路…

    Linux干货 2016-09-16
  • 马哥教育网络班22期+第5周课程练习

    week5: 1、显示当前系统上root、fedora或user1用户的默认shell; [root@rs1 ~]# awk -F':' '$1 ~ /^(root|fedora|user1)/{print $1,$NF}' /etc/pa…

    Linux干货 2016-09-08

评论列表(2条)

  • h
    h 2017-09-13 10:59

    记录内容不错,可以对不记得的内容做一个备注,为了更好的复习。

  • 娅娃爱
    娅娃爱 2017-11-06 13:26

    给一个大的赞,治好了我多年的正则恐惧症!