Linux之正则表达式

时间:2020-10-17 作者:admin

什么是正则表达式?

简单地说,正则表达式就是处理字符串的方法,它以行为单位来进行字符串的处理操作,正则表达式通过一些特殊符号的辅助,可以让用户轻易地完成【查找、删除、替换】某特定字符串的处理过程。

正则表达式基本上是一种**【表示法】**,只要程序支持这种表示法,那么该程序就可以用来作为正则表达式的字符串处理。

正则表达式的字符串表示方式依照不同的严谨度分为:基础正则表达式、扩展正则表达式。

用途:邮件服务器

注意:正则表达式与通配符是完全不一样的东西,因为【通配符代表的是bash操作接口的一个功能】,但是正则表达式则是一种字符串处理的方式。使用正则表达式的时候,需要特别注意当时环境的语系,否则可能会发现选取的结果不合人意。

一、基础正则表达式

1、符号的含义
“ [:alnum:] ”代表英文大小写字符及数字,亦即 0 ~ 9、A ~ Z、a ~ z
“ [:alpha:] ”代表任何英文大小写字符,亦即 A ~ Z、a ~ z
“ [:blank:] ”代表空格键与[Tab]键
“ [:cntrl:] ”代表键盘上面 控制键,包括CR、LF、Tab、Del
“ [:digit:] ”代表数字,亦即 0 ~ 9
“ [:graph:] ”代表空格符以外的所有按键
“ [:lower:] ”代表英文小写字符,亦即 a ~ z
“ [:print:] ”代表任何可以被打印出来的字符
“ [:punct:] ”代表标点字符,亦即 ” ’ ? ! ; : # $
“ [:upper:] ”代表英文大写字符,亦即 A ~ Z
“ [:space:] ”代表任何会产生的空白的字符,包括空格、Tab键、CR等
“ [:xdigit:] ”代表十六进制的数字类型

案例一:查看a.txt文件中所有含有数字的行
语法:cat a.txt | grep ‘[[:digit:]]’
Linux之正则表达式
2、行首字符 ’ ^ ’ 与行为字符 ’ $ ‘,“ ^ ”在字符集合符号([ ])中是表示反向,在外面表示定位在行首的意思
案例二:列出 /bin 目录下所
有以d开头的文件
Linux之正则表达式
3、任意一个字符
“ . ”表示【一定有一个任意字符】
“ * ”表示【重复前一个字符0次或N次】

注意:【.*代表零个或者多个任意字符】

案例三:获取 /bin 目录下以a开头h结尾且位数为四位的目录
语法:ls /bin | grep ‘^a…h$’
Linux之正则表达式
案例四:获取 /bin 目录下最少含有两个连续ee的目录
语法:ls /bin | grep ‘eee*’
Linux之正则表达式
4、限定连续RE字符范围{}
如果想要限制次数获取的范围,可以使用{},但是因为 { 和 } 在shell中是有特殊意义的,所有需要转义符 \ 来使它们有意义

案例五:获取 /bin 目录下含有四个字符的目录
语法:ls | grep ‘^.{4} $’
Linux之正则表达式
5、sed工具(重点)
当我们分析日志文件的时候,绝大部分需要分析关键词的使用、统计等,可以使用sed工具来实现。sed本身也是一个管道命令,可以分析标准输入。而且sed还可以将数据进行替换、删除、新增、选取特定行等功能。

语法:sed [-nefr] [操作]
“ -n ”表示只有经过sed特殊处理的那一行才会被列出
“ -e ”表示直接在命令行模式上进行sed的操作编辑
“ -f ”表示直接将sed的操作卸载一个文件内
“ -r ”表示使用扩展性正则表达式(默认是基础正则表达式)
操作说明: [n1,n2] function
“ n1,n2 表示行号 ”
“ a ”表示新增,后面可以接字符,这些字符会显示在新的一行
“ c ”表示替换,后面接字符,这些字符会替换n1,n2之间的行
“ d ”表示删除
“ i ”表示插入,后面接字符,这些字符会在新的一行出现
“ p ”表示打印
“ s ”表示可以直接进行替换操作

案例六:列出a.txt文件并打印行号,同时删除2-5行的内容
Linux之正则表达式如果需要删除第3行开始到最后一行,可以使用 nl a.txt | sed ‘3,

d

d’,

d 表示最后一行

案例七:替换a.txt文件中第一行的内容为Hello World
语法:nl a.txt | sed ‘1c Hello World’

Linux之正则表达式
部分数据的查找并替换的功能(重点):
语法:sed ‘s/要被替换的字符/新的字符/g’

案例八:获取 /etc/man_db.conf 中MAN存在的几条数据,但是含义#在内的注释不
要,而且空白行不要
语法:*cat /etc/man_db.conf | grep ‘MAN’ | sed ‘/#.s//g’ | sed ‘/^$/d’

二、扩展正则表达式

符号含义
“ + ”表示重复【一个或一个以上】的前一个RE字符
“ ? ”表示【零个或一个】前一个RE字符
“ | ”表示【或(or)的方式找出字符串】
“ () ”表示找出【群组】字符串

“ ()+ ”表示多个重复群组的判别

三、文件的格式化与相关处理

1、格式化打印
语法:printf ‘打印内容’ 实际内容
特殊格式:
“ \a ”表示警告声音输出
“ \b ”表示退格键
“ \f ”表示清除屏幕
“ \n ”表示输出新的一行
“ \r ”表示回车按键
“ \t ”表示水平的tab键
“ \v ”表示垂直的tab键
“ \xNN ”表示NN为两位数,可以转换数字成字符

2、数据处理工具:awk
sed常常用于一整行的处理,awk更倾向于一行当中分成数个字段来处理。awk主要处理每一行的字段内的数据(字段为最小的处理单位),而默认的字段的分隔符为空格键或者Tab键。
语法:awk ‘条件类型1{操作1} 条件类型2{操作2}’

案例九:列出最后5位登录用户并打印出第一个、第三个字段
语法:last -n 5 | awk ‘{print $1 “\t” $3}’

Linux之正则表达式

四、文件比对工具

1、比对两个文件之间的差距
语法:diff [-bBi] 文件1 文件2
“ -b ”表示忽略一行当中,仅有多个空白的差异
“ -B ”忽略空白行的差异
“ -i ”忽略大小写
Linux之正则表达式“ 12,14d11 ”表示左边第12,14行被删除(d)掉了,基准是右边的第11行
“ < ”表示左边的内容
“ > ”表示右边的内容

2、cmp(主要用于对比文件,主要利用字节单位对比,也可以对比二进制文件
语法:cmp 文件1 文件2
Linux之正则表达式

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。