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)
Thunk_LeeThunk_Lee
上一篇 2017-09-11 18:16
下一篇 2017-09-11 21:04

相关推荐

  • N26-第二周博客作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相 关示例演示。 文件管理类命令:mkdir rmdir cp rm mv ①mkdir命令:创建目录 格式:mkdir [OPTION]… DIRECTORY… option -m, –mode=MODE -p, –paren…

    Linux干货 2017-02-02
  • 密码保护:测试信息, 顺便贴上以前年少轻狂的内容.(未整理)

    无法提供摘要。这是一篇受保护的文章。

    Linux干货 2017-07-11
  • 马哥教育网络21期+第十周练习博客

    马哥教育网络21期+第十周练习博客 1、请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) CentOS启动流程:1,加电自检->Boot Sequence–>加载内核文件 BOOT Sequence中包含了MBR和GRUB     MBR:记录磁盘扇区,共512字…

    Linux干货 2016-09-19
  • mysql数据库及表的管理

    MySQL中字符大小写: 1、SQL关键字及函数名不区分字符大小写; 2、数据库、表及视图名称的大小区分与否取决于低层OS及FS 3、存储过程、存储函数及事件调度器的名字不区分大小写,但触发器区分; 4、表别名区分大不写; 5、对字段中的数据,如果字段类型为Binary类型,则区分大小写;非Binary不区分大小写; 数据库: CREATE {DATABAS…

    Linux干货 2015-06-01
  • http2.4版本基本配置应用

    练习题:分别使用httpd-2.2和httpd-2.4实现; 1、建立httpd服务,要求: (1) 提供两个基于名称的虚拟主机: www1.stuX.com,页面文件目录为/web/vhosts/www1;错误日志为/var/log/httpd/www1/error_log,访问日志为/var/log/httpd/www1/access_log; www2…

    2017-06-05
  • N26-第八周

    1、请描述网桥、集线器、二层交换机、三层交换机、路由器的功能、使用场景与区别。     网桥(birdge):工作于OSI模型中的数据链路层,是连接两个局域网的一种存储/转发设备,能将一个大的LAN分割为多个网段,或将两个以上的LAN互联为一个逻辑LAN,使LAN上的所有用户都可访问服务器,可以分割冲突域。   &nb…

    2017-03-08

评论列表(2条)

  • h
    h 2017-09-13 10:59

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

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

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