正则表达式及grep、sed、awk、cut、sort、uniq工具
2017-07-04 23:00
1076 查看
1.正则表达式
(1)定义:规定一些特殊语法用来对字符串进行模糊匹配;
(2)特点:
①灵活性、逻辑性和功能性较强;
②可以迅速地用简单的方式匹配字符串;
(3)使用事项:当正则表达式作为命令参数时,要用单引号括起来,因为正则表达式中的某些字符在shell中有特殊意义,如转义字符\,括起来后把原封不动地传递给命令。
2.字符的分类
(1)字符类
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/370a05b9bd576c4da21dbd7fb76c9482)
(2)数量限定符
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/1e538a5e6966bb1df0c560e66f64b49b)
(3)位置限定符
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/1f2ba2074bc7b9075c22a84eb8a3a4d5)
(4)其他字符
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/484ceca43afcd8ab19e4705a4c2bdf15)
3.grep工具
grep:行过滤工具,会将文本中符合条件的行直接提取出来,它支持正则表达式。
命令选项:
-E 表示扩展正则语法,某些字符表示特殊含义时,不需要进行转义,也可以直接使用egrep;
-i 忽略大小写
-R 递归式查找
-v 显示不符合条件的行
-q 安静模式匹配,无论是否匹配到都不显示,可以根据退出码判断是否匹配到;
4.标准正则语法和扩展正则语法的区别
标准正则语法和扩展正则语法的大部分规则相同,但对于一些有特殊含义的字符,如? + { } | ( )标准正则语法会将这些字符解释为普通字符,使用正则表达式时,必须对这些字符加 \ 进行转义
5.grep和正则表达式结合的例子
给出一个file文件,包含一些与QQ邮箱,电话号码,IP地址,163邮箱类似的字符串,如图所示:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/9a20d1a75e9c271748d359ea805fe5a9)
按要求进行匹配,并使用- -color进行高亮显示
(1)匹配出QQ邮箱
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/94b54303b196b475faf631bb264a54bd)
(2)匹配出电话号码
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/d509c3168a44192342ec7caf663e5c8e)
(3)匹配
c1e6
出ip地址
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/0b33d7d685d87e630d3be0108cd14f59)
(4)匹配出163邮箱
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/9a2a49ce06cc40f562db4099bcf5a2e8)
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开头的行
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/2e2ffd585401006f3dc71db521910da7)
②去掉printf前的注释
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/ee67b0f3b72c391338446c34827a55ec)
③在file文件中以a2开头并且后面只有2的字符串中,将2替换为~2~
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/d4b9a67db2f3d60c8834db7b9c65d9bf)
(5)sed的模式空间和保持空间
模式空间:数据可以直接处理;
保持空间:在进行数据处理时,作为数据的暂存区域;
一般情况下,只使用模式空间,对数据的加工处理只能在模式空间,而保持空间只是保存数据,不做任何处理;
命令:
g :将保持空间的内容拷贝至模式空间;
G:将保持空间的内容追加至模式空间;
h :将模式空间的内容拷贝至保持空间;
h :将模式空间的内容追加至保持空间;
d :删除所有行,并读入下一行到模式空间
D :删除当前行,不读入下一行
x :交换保持空间和模式空间的内容
n :将下一行读取到模式空间
N:将下一行添加到模式空间
举例:
①打印1~100相加之和
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/5284eedaa4ae6664fe69e5c432148029)
②给每行结尾添加空行显示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/4864051d12ca3f5d5c39967a18bba5ff)
③逆序打印文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/24e828f9f4077da88863ffa2fc4f0c87)
④在一个文件结尾追加以hello开头的所有行
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/c24c3b7c7084bccdf598b696c1942492)
⑤将一列数转换为一行数显示
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/b76e64b4053a807b7937aa751a154690)
⑥打印奇偶数行
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/b1907259d9fa45c12f12f908675711be)
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文件中的第二列
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/849b13137a5cbd3224e91711f0594d00)
②打印以productA开头的行的第二列
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/c338d0ee8b40fd96f1700c91c9a46df5)
③产品价格大于50时,打印产品名和YES,产品价格小于50时,打印产品名和NO:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/7ba4394e965dc73c8771c1d24349afce)
④
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/b063a1a8f5991d5aee6828c3b94cacab)
⑤计算1~100相加之和
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/3d208eb01bd4fca26bc6a9904efb1746)
(5)awk脚本
脚本第一行#!usr/bin/bah -f
①执行脚本
./test.awk file
②若脚本第一行没有写-f,执行时应该为awk -f test.awk file
(6)awk内置变量
OFS:输出域分隔符
FS:设置输出域分隔符
(7)-F 指明域分隔符
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/f997841d612d2db1b983b897a08ab2c1)
8.cut工具
切割数据
①
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/71fb61d6e873e3f037d2520193e3c1b7)
②
![](https://oscdn.geek-share.com/Uploads/Images/Content/201707/4dc82b7af58973861845fb120c7c3c03)
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 显示出现多次的行
例子:行转换为列显示,去掉重复的行,显示重复次数,并且按升序打印
(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)匹配
c1e6
出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 显示出现多次的行
例子:行转换为列显示,去掉重复的行,显示重复次数,并且按升序打印
相关文章推荐
- Linux下正则表达式以及几种工具:grep,sed,awk,cut,sort,uniq的简单应用
- shell工具——cut、tr、grep、sort、uniq、re、sed、awk
- 几个常用的文本处理shell 命令:find、grep、xargs、sort、uniq、tr、cut、paste、wc、sed、awk
- 三个支持正则表达式的行处理的工具: grep/sed/awk
- Linux下的sed、awk、cut、sort、uniq工具
- linux(5)--补充(管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
- (四)find 之grep cut paste sort awk sed find uniq 全面总结
- 正则表达式 grep cut sort uniq
- Linux grep sed nl awk sort,uniq,cut,wc rsync命令详解
- (管道| / 重定向> / xargs)/find 与xargs结合使用/vi,grep,sed,awk(支持正则表达式的工具程序)
- (三) paste 之grep cut paste sort awk sed find uniq 全面总结
- 正则表达式和使用正则表达式的grep,sed,awk等工具
- Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本
- linux基础篇-07,linux文本处理cat more less head tail sort uniq grep cut jion sed awk
- 常用正则表达式 grep awk sed
- Shell正则表达式与grep、sed、awk的特点
- GREP、SED、AWK、TR、SORT、UNIQ的一些用法
- Linux---文本处理(正则表达式,grep,awk,sed)
- 正则表达之grep;sed;awk工具简述
- find grep wc awk sed sort uniq split指令详解