第十一章:正则表达式

11.1 grep/egrep工具的使用

格式:grep 【-cinvABC】 ‘关键词’ filename。

 -c:不是打印符合要求的行数;
 -i:表示忽略大小写;
 -n:表示输出符合要求的行及其行号;
 -v:表示打印不符合要求的行;
 -A:后面跟一个数字(有无空格都可以),例如-A2表示打印符合要求的行以及下面两行;
 -B:后面跟一个数字,例如-B2表示打印符合要求的行以及上面两行;
 -C:后面跟一个数字,例如-C2表示打印符合要求的行以及上下两行。

1.过滤处带有某个关键词的行,并输出行号

格式:grep -n ‘关键词’ 【文件】

2.过滤处不带有某个关键词的行,并输出行号

格式:grep -nv ‘关键词’ 【文件】

3.过滤出所有包含数字的行

格式:grep ‘[数字范围]’ 【文件】

4.过滤出所有不包含数字的行

格式:grep -v ‘[数字范围]’ 【文件】

5.过滤掉所有以#开头的行

格式:grep -v '^#'【文件】

6.过滤掉所有空行和以#开头的行

格式:grep -v '^#' 【文件】 | grep -v ‘^$’

如何打印出不以英文字母开头的行呢:
格式:grep '^[^a-zA-Z]'【文件】

7.过滤出任意一个字符和重复字符

格式:grep '字符.字符' filename

.表示任意一个字符

*表示零个或多个*前面的字符。ooo*表示oo、ooo、oooo…或者更多的o

.*表示零个或多个任意字符,空行也包含在内。

8.指定要过滤出的字符出现次数

格式:grep '字符\{数字\}' filename

9.过滤处一个或多个指定的字符

格式:grep '字符+' filename

和grep不同,这里使用的时符号+,他表示匹配1个或多个前面的字符。{ }符号可以直接被egrep使用,而不用加\转义:

10.过滤处零个或一个指定的字符

格式:egrep '字符?' filename

11.过滤处字符串1或者字符串2

格式:egrep '字符|字符|字符' filename

12.egrep中()的应用

格式:egrep '字符(字符|字符)字符' filename

这里用()表示一个整体,上例会把包含root或者rato的行过滤出来,另外也可以()和其他字符组合在一起,例如(oo)+就表示1个或者多个oo:

 

二、sed工具的使用

1.打印某行

格式:sed -n ‘n’p filename,单引号内的n是一个数字,表示第几行。-n选项的作用是只显示我们要打印的行,无关紧要的内容不显示。

你可以去掉-n选项对比一下差异。要想把所有行都打印出来,可以使用使用命令sed -n ’1,$’p filename。

2.打印包含某个字符串的行

格式:sed -n ‘/字符串/’p filename

这种用法就类似于grep了,在grep中使用的特殊字符(如^$.*等)同样也能在sed中使用:

sed命令加上-e选项可以实现多个行为:

3.删除某些行

删除指定单行:
格式:sed ‘n’d filename

删除指定多行:
格式:sed ‘n1,n2’p filename

删除匹配某个字符的行:
格式:sed ‘/字符串/’d filename

4.替换字符或者字符串

格式:sed ‘n1,n2s/字符串/字符串/g’ filename

参数s代表替换动作,参数g表示本行全局替换,如果不加g则只替换本行出现的第一个,跟vi的替换差不多。
除了可以使用/作为分隔符外,还可以使用其他特殊字符,例如#和@:

如何让删除文档中所有的数字或者字母?命令如下:
格式:sed ‘s/[n1-n2]//g’ filename(这里是替换为空)

[0-9]表示任意的数字。也可以写成[a-zA-Z]或者[0-9a-zA-Z]:
格式:sed ‘s/[a-zA-Z]//g’ filename(这里是替换为空)

5.调换两个字符串的位置

格式:sed 's/\(字符串\)\(.*\)\(字符串\)/\3\2\1/’ filename

小括号在sed中属于特殊符号,必须在前面加转义字符\,替换时则携程类似\、\2或\3的形式。括号只是想把替换的字符打包成一个整体。如何省略转义字符呢?加-r选项!
格式:sed -r 's/(字符串)(.*)(字符串)/\3\2\1/’ filename

除了调换两个字符串的位置,有时候常常会用sed在某一行前后增加指定内容:
格式:sed 's/^.*$/指定内容$/’ filename

6.直接修改文件的内容

格式:sed -i 's/(字符串)/(字符串)/g’ filename

三、awk工具的使用

1.截取文档中的某个段

  •  -F:指定分隔符;(不加以空格或者tab为分隔符)
    格式:awk -F ':' '{print 字段}'

注意awk的格式,-F后面紧跟单引号,单引号里面为分隔符。print的动作要用{ }括起来,否则会报错。print还可以打印自定义内容,但是自定义内容要用双括号括起来:
格式:awk -F ':' '{print 字段 “自定义内容”}'

2.匹配字符或者字符串

格式:awk ‘/字符/’ filename

跟sed用法相似,能实现grep的功能。不过awk还有比sed更强大的匹配:
格式:awk -F ‘:’ ‘字段~/字符/’ filename

它可以让某个字段去匹配,~就是匹配的意思,并且awk可以多次匹配:

3.条件操作符

格式:awk -F ‘:’ ‘字段==“值”’ filename

可以用逻辑符号进行判断,比如==就是等于,也可以理解为精确匹配。另外还有>、>=、<、<=、!=等。值得注意的是在和数字比较时,若是把比较的数字用双引号引起来,那么awk不会认为是数字,而是认为是字符,不加双引号则会认为是数字。
格式:awk -F ‘:’ ‘字段>=“值”’ filename


不加双引号后:(这个原理跟sort排序一样。)
格式:awk -F ‘:’ ‘字段>=值’ filename

本例中,!=表示不匹配,他除了针对某一个段的字符进行逻辑比较外,还可以在两个段之间进行逻辑比较。
格式:awk -F ‘:’ ‘字段 比较符号 字段’ filename

另外还可以使用&&和||,分别表示并且和或者:

4.awk的内置变量

awk常用的变量有OFS、NF和NR,OFS和-F选项有类似的功能,也是用来定义分隔符的,但是他是在输出的时候定义,NF表示用分隔符分隔后一共有多少段,NR表示行号。
①OFS(NR,OFS和-F选项有类似的功能,也是用来定义分隔符的,但是他是在输出的时候定义)


②NF(NF表示用分隔符分隔后一共有多少段。NF是多少段,$NF是最后一段的值)

③NR(NR表示行号。可做判断条件,也可以配合段匹配一起使用)

5.awk中的数学运算

①awk可以更改段值:

②对各个段的值进行数学运算:

③计算某个段的总和:

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值