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

相关推荐

  • N22-第五周作业

    1、显示当前系统上root、fedora或user1用户的默认shell;  egrep "^(root|fedora|user1)" /etc/passwd|awk -F: '{printf "%-15s:%-s\n",$1,$7}' 2…

    Linux干货 2016-09-15
  • M22 程序员偷懒战法

    前段时间有个外国的程序猿走红网络,这个哥们可以说是懒到了极点,上班请假给领导发短信写脚本,下班晚回家给老婆发短信写脚本,甚至于接个咖啡也要写脚本。这个哥们离职之后,他的同事在他的办公电脑上发现了这些脚本,并公布到了网上,引起众程序猿纷纷膜拜。最近我刚好学到shell脚本部分,就让我分析其中的一个跟领导请假的脚本吧。 #!/bin/sh -e # Exit e…

    Linux干货 2017-04-06
  • 学习目标

    先把落下的课补上……

    Linux干货 2016-10-31
  • N24_辉 学习宣言

    我志愿加入马帮的大家庭。 在此,我坚信有志者事竟成,同时,机会总是留给有准备的人的。 既来之,则安之。我的目标是能在规定的时间内结业,正如马哥所说:完成比完美更重要! 无论如何,也要完成!fighting!!!

    Linux干货 2016-10-24
  • Linux下的查找命令

           Linux下的查找命令有很多,常用的有grep、which、whereis、locate、find。使用linux系统难免会忘记文件所在的位置,小编就是如此。所以我们在文件系统上常常需要根据文件的各种属性去查找符合条件的文件,所以小编今天特意写一篇文章来介绍一下这几个常用的查找命令。 一、Gre…

    Linux干货 2017-08-13
  • 用户权限及正则表达式

    ln –s软连接原文件可以写绝对路径或相对于软连接文件的相对路径 ln 硬链接的原文件可以写绝对路径,相对于硬链接文件的相对路径或相对于当前路径的路径(因为硬链接主要是看节点号) etc/passwd格式: username:x:uid:gid:home:shell etc/shadow格式 username:password:password age:mi…

    Linux干货 2016-08-08

评论列表(2条)

  • h
    h 2017-09-13 10:59

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

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

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