shell-——正则表达式

目录

正则表达式之

                元字符

                表示次数

                位置锚定

                分组和其他

扩展正则表达式

grep

egrep

 sed

                基本用法

                 sed脚本格式

                 sed常用命令

awk   

                基础用法

                结合sed取IP地址

                awk的内置变量


        

        REGEXP: Regular Expressions,由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符),不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符

        正则表达式被很多程序和开发语言所广泛支持:vim, less,grep,sed,awk, nginx,mysql 等

主要用来匹配字符串(命令结果,文本内容),

通配符匹配文件(而且是已存在的文件)

  • 基本正则表达式

  • 扩展正则表达式

可以使用man 7 regex手册帮助

正则表达式之

                元字符

        元字符是一个或一组代替一个或多个字符的字符。

        .   匹配任意单个字符,可以是一个汉字
        []   匹配指定范围内的任意单个字符,示例:[zhou]   [0-9]   []   [a-zA-Z]
        [^] 匹配指定范围外的任意单个字符,示例:[^zhou] [^a.z] a.z

其他元字符

[:alnum:] 字母和数字
 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z
 [:lower:] 小写字母,示例:[[:lower:]],相当于[a-z]
 [:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 包括空格、制表符(水平和垂直)、换行符、回车符等各种类型的空白,比[:blank:]包含的范围广
[:cntrl:]  不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字
 [:xdigit:]   十六进制数字
  [:graph:] 可打印的非空白字符
 [:print:] 可打印字符
[:punct:] 标点符号
 w 匹配单词构成部分,等价于[_[:alnum:]]
 W 匹配非单词构成部分,等价于[^_[:alnum:]]
  S 匹配任何非空白字符。等价于 [^ fnrtv]。
   s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。注意 Unicode 正则表达式会匹配全角空格符

[root@localhost data]#touch {a..z}.txt
[root@localhost data]#ls
a.txt       b.txt  dns.sh  e.txt  g.txt  i.txt  k.txt  m.txt  o.txt  q.txt  s.txt  u.txt  w.txt  y.txt
[a..z].txt  c.txt  d.txt   f.txt  h.txt  j.txt  l.txt  n.txt  p.txt  r.txt  t.txt  v.txt  x.txt  z.txt
#匹配[]中任意一个字符

 #匹配不是a-z.txt文件

                表示次数

* 匹配前面的字符任意次,包括0次,贪婪模式:尽可能长的匹配
.* 任意长度的任意字符
/td> 匹配其前面的字符出现0次或1次,即:可有可无
+ 匹配其前面的字符出现最少1次,即:肯定有且 >=1 次
{n} 匹配前面的字符n次
{m,n} 匹配前面的字符至少m次,至多n次
{,n} 匹配前面的字符至多n次,<=n
{n,} 匹配前面的字符至少n次 

 ##代表前面的o出现3次以上

#代表前面o出现2次以上4次以下 

#代表o匹配任意次 

#一个以上 

                位置锚定

^ 行首锚定, 用于模式的最左侧
$ 行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行 (单独一行  只有root)
^$ 空行
^[[:space:]]*$ 空白行
< 或 b 词首锚定,用于单词模式的左侧(连续的数字,字母,下划线都算单词内部)
> 或 b    词尾锚定,用于单词模式的右侧
<PATTERN>   匹配整个单词

#过滤出不是已#号开头的非空行

#过滤非空行

                分组和其他

        分组:() 将多个字符捆绑在一起,当作一个整体处理,如:(root)+

        后向引用:分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: 1, 2, 3, …,1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

# 分组,分成三组和分成俩组

shell-——正则表达式

 #提取ip地址(匹配数字)

扩展正则表达式

表示次数

#匹配oo字符和出现g的次数 

shell-——正则表达式

 #匹配oo

shell-——正则表达式

表示分组

看了扩展正则表达式是不是可以忘记普通正则表达式了,还是扩展正则表达式简单一点

grep

grep [选项]… 查找条件 目标文件

  • -i:查找时忽略大小写

  • -v:反向查找,输出与查找条件不相符的行

  • -o 只显示匹配项

  • -f 对比两个文件的相同行

  • -c 匹配的行数

egrep

        egrep命令作用是在文件内查找指定的字符串。

        egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。

        egrep命令为 grep 的扩充版本, 改良了许多传统 grep 不能或不便的操作. 比方说:
        grep之下不支持 与 + 这两种modifier, 但egrep可以。
        grep不支持 a|b 或 (abc|xyz) 这类”或一”比对, 但egrep可以。
        grep在处理 {n,m} 时, 需用 { 与 } 处理, 但egrep则不需要。

常用参数:

-i 搜索时,忽略大小写
-c 只输出匹配行的数量
-l 只列出符合匹配的文件名,不列出具体的匹配行
-n 列出所有的匹配行,显示行号
-h 查询多文件时不显示文件名
-s 不显示不存在、没有匹配文本的错误信息
-v 显示不包含匹配文本的所有行
-w 匹配整词
-x 匹配整行
-r 递归搜索
-q 禁止输出任何结果,已退出状态表示搜索是否成功
-b 打印匹配行距文件头部的偏移量,以字节为单位
-o 与-b结合使用,打印匹配的词据文件头部的偏移量,以字节为单位

 sed

        sed 即 Stream EDitor,和 vi 不同,sed是行编辑器

        Sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(PatternSpace),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。一次处理一行的设计模式使得sed性能很高,sed在读取大文件时不会出现卡顿的现象。如果使用vi命令打开几十M上百M的文件,明显会出现有卡顿的现象,这是因为vi命令打开文件是一次性将文件加载到内存,然后再打开。Sed就避免了这种情况,一行一行的处理,打开速度非常快,执行速度也很快

来源:小柏ぁ

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年9月26日
下一篇 2021年9月26日

相关推荐