java linux runtime 正则表达式_Linux之正则表达式

什么是正则表达式?

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

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

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

用途:邮件服务器

注意:正则表达式与通配符是完全不一样的东西,因为【通配符代表的是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:]]'

3ce8c6efc504e17a7f45b7502cbdd651.png

2、行首字符 ’ ^ ’ 与行为字符 ’ $ ',“ ^ ”在字符集合符号([ ])中是表示反向,在外面表示定位在行首的意思

案例二:列出 /bin 目录下所有以d开头的文件

92d02bf24d50c64a7b7507c8eeabb1b4.png

3、任意一个字符

“ . ”表示【一定有一个任意字符】

“ * ”表示【重复前一个字符0次或N次】

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

案例三:获取 /bin 目录下以a开头h结尾且位数为四位的目录

语法:ls /bin | grep '^a…h$'

80bbebc0f92f5f54ba1d79ab0b12f403.png

案例四:获取 /bin 目录下最少含有两个连续ee的目录

语法:ls /bin | grep ‘eee*’

f98fb4f7e8ad6a0c1128b363409b5cb0.png

4、限定连续RE字符范围{}

如果想要限制次数获取的范围,可以使用{},但是因为 { 和 } 在shell中是有特殊意义的,所有需要转义符 \ 来使它们有意义。

案例五:获取 /bin 目录下含有四个字符的目录

语法:ls | grep '^.{4} $'

34a333be3de8c74b053850a3360c9ac5.png

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行的内容

0edfb1eca0fd6e8ed7cc4a7b1176891a.png如果需要删除第3行开始到最后一行,可以使用 nl a.txt | sed '3,d ′ , d',d′, 表示最后一行

案例七:替换a.txt文件中第一行的内容为Hello World

语法:nl a.txt | sed '1c Hello World’

2c2566689d9303ebe1d5886ec99b2e2a.png

部分数据的查找并替换的功能(重点):

语法: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}’

16186ba97afe507ed3a51b54fda63de5.png

四、文件比对工具

1、比对两个文件之间的差距

语法:diff [-bBi] 文件1 文件2

“ -b ”表示忽略一行当中,仅有多个空白的差异

“ -B ”忽略空白行的差异

“ -i ”忽略大小写

ef836ad4f211c426b417ac418a6be521.png“ 12,14d11 ”表示左边第12,14行被删除(d)掉了,基准是右边的第11行

“ < ”表示左边的内容

“ > ”表示右边的内容

2、cmp(主要用于对比文件,主要利用字节单位对比,也可以对比二进制文件)

语法:cmp 文件1 文件2

8c4b5f618f31b6a07de59d9d96ae64be.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值