正则表达式及grep、sed、awk、cut、sort、uniq工具

1.正则表达式

(1)定义:规定一些特殊语法用来对字符串进行模糊匹配;
(2)特点:
①灵活性、逻辑性和功能性较强;
②可以迅速地用简单的方式匹配字符串;
(3)使用事项:当正则表达式作为命令参数时,要用单引号括起来,因为正则表达式中的某些字符在shell中有特殊意义,如转义字符\,括起来后把原封不动地传递给命令。

2.字符的分类
(1)字符类
正则表达式及grep、sed、awk、cut、sort、uniq工具

(2)数量限定符
正则表达式及grep、sed、awk、cut、sort、uniq工具

(3)位置限定符
正则表达式及grep、sed、awk、cut、sort、uniq工具

(4)其他字符
正则表达式及grep、sed、awk、cut、sort、uniq工具

3.grep工具

grep:行过滤工具,会将文本中符合条件的行直接提取出来,它支持正则表达式。
命令选项:

  • -E 表示扩展正则语法,某些字符表示特殊含义时,不需要进行转义,也可以直接使用egrep;
  • -i 忽略大小写
  • -R 递归式查找
  • -v 显示不符合条件的行
  • -q 安静模式匹配,无论是否匹配到都不显示,可以根据退出码判断是否匹配到;

4.标准正则语法和扩展正则语法的区别

标准正则语法和扩展正则语法的大部分规则相同,但对于一些有特殊含义的字符,如? + { } | ( )标准正则语法会将这些字符解释为普通字符,使用正则表达式时,必须对这些字符加 \ 进行转义

5.grep和正则表达式结合的例子
给出一个file文件,包含一些与QQ邮箱,电话号码,IP地址,163邮箱类似的字符串,如图所示:
正则表达式及grep、sed、awk、cut、sort、uniq工具

按要求进行匹配,并使用- -color进行高亮显示
(1)匹配出QQ邮箱
正则表达式及grep、sed、awk、cut、sort、uniq工具

(2)匹配出电话号码
正则表达式及grep、sed、awk、cut、sort、uniq工具

(3)匹配出ip地址
正则表达式及grep、sed、awk、cut、sort、uniq工具

(4)匹配出163邮箱
正则表达式及grep、sed、awk、cut、sort、uniq工具

6.sed工具

sed:流式编辑器
(1) 命令格式: sed ‘/pattern/action’ file

  • pattern表示每读取一行进行正则匹配
  • action表示进行相应的动作,命令

(2)命令选项

  • -i 将处理结果写入原文件
  • -n 只显示匹配的结果
  • -e 对模式空间的一行内容一次应用多种规则、动作

(3)action的命令选项
/pattern/p 打印匹配的行
/pattern/d 删除匹配的行
/pattern/s/p1/p2/ 查找符合条件的行,用p2替换该行第一个匹配p1的字符串
/pattern/s/p1/p2/g 查找符合条件的行,用p2替换该行所有匹配p1的字符串

(4)例子:
①注释文件中以printf开头的行
正则表达式及grep、sed、awk、cut、sort、uniq工具

②去掉printf前的注释
正则表达式及grep、sed、awk、cut、sort、uniq工具

③在file文件中以a2开头并且后面只有2的字符串中,将2替换为~2~
正则表达式及grep、sed、awk、cut、sort、uniq工具

(5)sed的模式空间和保持空间

模式空间:数据可以直接处理;
保持空间:在进行数据处理时,作为数据的暂存区域;

一般情况下,只使用模式空间,对数据的加工处理只能在模式空间,而保持空间只是保存数据,不做任何处理;

命令:

  • g :将保持空间的内容拷贝至模式空间;
  • G:将保持空间的内容追加至模式空间;
  • h :将模式空间的内容拷贝至保持空间;
  • h :将模式空间的内容追加至保持空间;
  • d :删除所有行,并读入下一行到模式空间
  • D :删除当前行,不读入下一行
  • x :交换保持空间和模式空间的内容
  • n :将下一行读取到模式空间
  • N:将下一行添加到模式空间

举例:
①打印1~100相加之和
正则表达式及grep、sed、awk、cut、sort、uniq工具

②给每行结尾添加空行显示
正则表达式及grep、sed、awk、cut、sort、uniq工具

③逆序打印文件
正则表达式及grep、sed、awk、cut、sort、uniq工具

④在一个文件结尾追加以hello开头的所有行
正则表达式及grep、sed、awk、cut、sort、uniq工具

⑤将一列数转换为一行数显示
正则表达式及grep、sed、awk、cut、sort、uniq工具

⑥打印奇偶数行
正则表达式及grep、sed、awk、cut、sort、uniq工具

7.awk工具

(1)
awk可通过指定列或指定域处理数据;
awk将一行内容称为一条记录,将用指定分隔符分隔的列称为域;
awk一般以空格作为域分隔符,以\n作为记录分隔符;
awk也可以使用BEGIN和END进行匹配;

(2) 命令格式:
awk ‘/pattern/{action}’ file
awk ‘condition{action}’ file

(3)命令参数:
$0:表示当前整个行
$1:表示第一列  $2:表示第二列
$NF:最后一列  $(NF-1) :倒数第二列
 
(4)例子:
①打印file4文件中的第二列
正则表达式及grep、sed、awk、cut、sort、uniq工具

②打印以productA开头的行的第二列
正则表达式及grep、sed、awk、cut、sort、uniq工具
 
③产品价格大于50时,打印产品名和YES,产品价格小于50时,打印产品名和NO:
正则表达式及grep、sed、awk、cut、sort、uniq工具

正则表达式及grep、sed、awk、cut、sort、uniq工具
 
⑤计算1~100相加之和
正则表达式及grep、sed、awk、cut、sort、uniq工具

(5)awk脚本
 脚本第一行#!usr/bin/bah -f
①执行脚本 
./test.awk file
②若脚本第一行没有写-f,执行时应该为awk -f test.awk file
 
(6)awk内置变量
OFS:输出域分隔符
FS:设置输出域分隔符

(7)-F 指明域分隔符
正则表达式及grep、sed、awk、cut、sort、uniq工具

8.cut工具
切割数据

正则表达式及grep、sed、awk、cut、sort、uniq工具 


正则表达式及grep、sed、awk、cut、sort、uniq工具

9.sort工具
sort file 按升序输出
sort -r file 按降序输出
sort -u file 去掉重复的行
sort -r file -o file 将降序排好的文件写会原文件
sort -n file 将字符按数值排序,默认升序
sort -k 2 file 将第二列进行排序

10.uniq工具
sort file | uniq 去掉重复的行
sort file | uniq -c 去掉重复的行并显示重复次数
sort file | uniq -u 显示出现一次的行
sort file | uniq -d 显示出现多次的行

例子:行转换为列显示,去掉重复的行,显示重复次数,并且按升序打印
正则表达式及grep、sed、awk、cut、sort、uniq工具