1.正则表达式
(1)定义:规定一些特殊语法用来对字符串进行模糊匹配;
(2)特点:
①灵活性、逻辑性和功能性较强;
②可以迅速地用简单的方式匹配字符串;
(3)使用事项:当正则表达式作为命令参数时,要用单引号括起来,因为正则表达式中的某些字符在shell中有特殊意义,如转义字符\,括起来后把原封不动地传递给命令。
2.字符的分类
(1)字符类
(2)数量限定符
(3)位置限定符
(4)其他字符
3.grep工具
grep:行过滤工具,会将文本中符合条件的行直接提取出来,它支持正则表达式。
命令选项:
- -E 表示扩展正则语法,某些字符表示特殊含义时,不需要进行转义,也可以直接使用egrep;
- -i 忽略大小写
- -R 递归式查找
- -v 显示不符合条件的行
- -q 安静模式匹配,无论是否匹配到都不显示,可以根据退出码判断是否匹配到;
4.标准正则语法和扩展正则语法的区别
标准正则语法和扩展正则语法的大部分规则相同,但对于一些有特殊含义的字符,如? + { } | ( )标准正则语法会将这些字符解释为普通字符,使用正则表达式时,必须对这些字符加 \ 进行转义
5.grep和正则表达式结合的例子
给出一个file文件,包含一些与QQ邮箱,电话号码,IP地址,163邮箱类似的字符串,如图所示:
按要求进行匹配,并使用- -color进行高亮显示
(1)匹配出QQ邮箱
(2)匹配出电话号码
(3)匹配出ip地址
(4)匹配出163邮箱
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开头的行
②去掉printf前的注释
③在file文件中以a2开头并且后面只有2的字符串中,将2替换为~2~
(5)sed的模式空间和保持空间
模式空间:数据可以直接处理;
保持空间:在进行数据处理时,作为数据的暂存区域;一般情况下,只使用模式空间,对数据的加工处理只能在模式空间,而保持空间只是保存数据,不做任何处理;
命令:
- g :将保持空间的内容拷贝至模式空间;
- G:将保持空间的内容追加至模式空间;
- h :将模式空间的内容拷贝至保持空间;
- h :将模式空间的内容追加至保持空间;
- d :删除所有行,并读入下一行到模式空间
- D :删除当前行,不读入下一行
- x :交换保持空间和模式空间的内容
- n :将下一行读取到模式空间
- N:将下一行添加到模式空间
举例:
①打印1~100相加之和
②给每行结尾添加空行显示
③逆序打印文件
④在一个文件结尾追加以hello开头的所有行
⑤将一列数转换为一行数显示
⑥打印奇偶数行
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文件中的第二列②打印以productA开头的行的第二列
③产品价格大于50时,打印产品名和YES,产品价格小于50时,打印产品名和NO:④
⑤计算1~100相加之和(5)awk脚本
脚本第一行#!usr/bin/bah -f
①执行脚本
./test.awk file
②若脚本第一行没有写-f,执行时应该为awk -f test.awk file
(6)awk内置变量
OFS:输出域分隔符
FS:设置输出域分隔符(7)-F 指明域分隔符
8.cut工具
切割数据
①
②
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 显示出现多次的行
例子:行转换为列显示,去掉重复的行,显示重复次数,并且按升序打印