Shell编程之正则表达式-grep、sed、awk

目录

前言

一、正则表达式的概述

1.基础正则表达式

2.扩展正则表达式 

二、Sed工具

1.Sed工具概述

2.Sed 的工作流程

3.Sed基本语法

三、Awk工具

1.Awk基本语法

2.Awk的工作原理 

2.Awk内置变量

四、常用的小工具

1.使用说明-cut

2.使用说明-sort

3.使用说明-uniq

4.使用说明-tr

总结


前言

Sed是文本处理工具,可以读取文本内容,根据指定条件对数据进行添加、删除、替换等操作,被广泛用于Shell脚本。Awk是一个功能强大的编辑工具,用于在Linux下对文本和数据进行处理。

一、正则表达式的概述

正则表达式分为基础正则表达式(BRE)和扩展正则表达式(ERE),它不是一个工具程序,而是一个字符串处理的标准依据,是使用单个字符串搜索、匹配一系列符合某个语法规则的字符串。

支持正则表示的工具

文本处理工具 基础正则表达式 扩展正则表达式
vi编辑器 支持 不支持
grep 支持 不支持
egrep 支持 支持
sed 支持 不支持
awk 支持 支持

1.基础正则表达式

通常用于判断语句中,用来检查某一字符串是否满足某一格式

正则表达式是由普通字符与元字符组成

普通字符包括大小写字母、数字、标点符号及一些其他符号

元字符在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前面的字符)在目标对象中的出现模式

基础正则表达式元字符

元字符 作用
\ 转义字符,将特殊字符进行转义,忽略其特殊意义a\.b匹配a.b,但不能匹配ajb,.被转义为特殊意义
^ 匹配行首,^则是匹配字符串的开始^tux匹配以tux开头的行
$ 匹配行尾,$则是匹配字符串的结尾tux$匹配以tux结尾的行
. 匹配除换行符\n之外的任意单个字符,awk则中可以ab.匹配abc或bad,不可匹配abcd或abde,只能匹配单字符....
* 匹配前面子表达式0次或者多次 例:goo*d、go.*d
[io] 匹配含有short和shirt的字符。grep -n 'sh[io]rt' test.txt
[^list] 匹配任意不在list列表中的一个字符 例: [^a-z]、[^0-9]、[^A-Z0-9]
\{n\} 匹配前面的子表达式n次,例:查询两个 o 的字符。grep -n 'o\{2\}' test.txt
\{n,\} 匹配前面的子表达式不少于n次,例: 查询以 w 开头以 d 结尾,中间包含 2 个或 2 个以上 o 的字符串。 grep -n 'wo\{2,\}d' test.txt
\{n,m\} 匹配前面的子表达式n到m次,例:查询以 w 开头以 d 结尾,中间包含 2~5 个 o 的字符串。grep -n 'wo\{2,5\}d' test.txt

Shell编程之正则表达式-grep、sed、awk_第1张图片

2.扩展正则表达式 

扩展正则表达式是对基础正则表达式的扩充与深化

扩展元字符

元字符 作用
+ 重复一个或者一个以上的前一个字符,示例:执行“egrep -n 'wo+d' test.txt”命令,即可查询"wood" "woood" "woooooood"等字符串
零个或者一个的前一个字符,示例:执行“egrep -n 'bes?t' test.txt”命令,即可查询“bet”“best”这两个字符串
| 使用或者(or)的方式找出多个字符,示例:执行“egrep -n 'of|is|on' test.txt”命令即可查询"of"或者"if"或者"on"字符串
() 查找“组”字符串,示例:“egrep -n 't(a|e)st' test.txt”。“tast”与“test”因为这两个单词的“t”与“st”是重复的,所以将“a”与“e”
()+ 辨别多个重复的组,示例:“egrep -n 'A(xyz)+C' test.txt”。该命令是查询开头的"A"结尾是"C",中间有一个以上的"xyz"字符串的意思

二、Sed工具

1.Sed工具概述

文本处理工具、读取文本内容、根据指定的条件进行处理、如删除、替换、添加等

可在无交互情况下实现相当复杂的文本处理操作

被广泛用于Shell脚本,以完成自动化处理任务

sed依赖于正则表达式

2.Sed 的工作流程

读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。

执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行。

显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。在所有的文件内容都被处理完成之前,上述过程将重复执行,直至所有内容被处理完。

3.Sed基本语法

sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数

常用选项

-f 表示用指定的脚本文件来处理输入的文本文件。
-e 表示用指定命令或者脚本来处理输入的文本文件。
-n 表示仅显示处理后的结果。
-i 直接编辑文本文件。

常用操作 

a 增加,在当前行下面增加一行指定内容。
c 替换,将选定行替换为指定内容。
d 删除,删除选定的行。
i 插入,在选定行上面插入一行指定内容。
s 替换,替换指定字符。
y 字符转换。
p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以 ASCII 码输出。其通常与“-n”选项一起使用。

Shell编程之正则表达式-grep、sed、awk_第2张图片

Shell编程之正则表达式-grep、sed、awk_第3张图片

Shell编程之正则表达式-grep、sed、awk_第4张图片

Shell编程之正则表达式-grep、sed、awk_第5张图片

Shell编程之正则表达式-grep、sed、awk_第6张图片

迁移符合条件的文本

H 复制到剪贴板。例:将包含the的行迁移至文件末尾。sed '/the/{H;d};$G' test.txt
g\G 将剪贴板中的数据覆盖\追加到指定行
w 保存为文件。例:将包含the的行号另存为文件out.file。sed '/the/w out.file' test.txt
r 读取指定文件。将文件/etc/hostname的内容添加到含the的每行后。sed '/the/r/etc/hostname' test.txt
a 追加指定内容。在包含the的每行后插入一个新行,内容为NEW。sed '/the/aNEW' test.txt

三、Awk工具

Awk是一个功能强大的编辑工具,用于Linux/UNIX下对文本和数据进行处理

无交互的情况下实现复杂的文本操作

1.Awk基本语法

awk 选项 '模式或条件 {编辑命令}' 文件1 文件2
awk -f 脚本文件 文件1 文件2

2.Awk的工作原理 

逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字符保存到内建变量中,当读取到第一行时,匹配条件然后执行指定动作,再接着读取第二行数据处理,不会默认输出。如果没有定义匹配条件。

Shell编程之正则表达式-grep、sed、awk_第7张图片

2.Awk内置变量

FS 指定每行文本的字段分隔符,缺省为空格或制表位
NF 当前处理的行的字段个数
NR 当前处理的行的行号(序数)
$0 当前处理的行的整行内容
$n 当前处理的第n个字段(第n列)

Shell编程之正则表达式-grep、sed、awk_第8张图片

Shell编程之正则表达式-grep、sed、awk_第9张图片

Shell编程之正则表达式-grep、sed、awk_第10张图片

Shell编程之正则表达式-grep、sed、awk_第11张图片

四、常用的小工具

1.使用说明-cut

cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。如果不指定File参数,cut 命令将读取标准输入。

注意:cut只擅长于处理单个字符为间隔的文本。

#使用格式
cut [选项] 参数

常用选项

-b 按字节截取。查看第三个字节。who | cut -b 3
-c 按字节截取,常用于中文
-d 指定以什么分隔符截取,默认为制表符。先以“:”分隔,查看第一个字符。cat /etc/passwd | cut -d':' -f 1
-f 通常和-d一起

2.使用说明-sort

是一个以行为单位的文件内容进行排序的工具,也可以根据不同的数据类型来排序。例如数据和字符的排序就不一样。

#使用格式
sort [选项] 参数

常用选项

-t 指定分隔符,默认使用[Tab]键或空格分隔
-k 指定排序区域,哪个区间排序
-n 按照数字进行排序,默认是以文字形式排序
-u 等同于 uniq,表示相同的数据仅显示一行,注意:如果行尾有空格去重就不成功
-r 反向排序,默认是升序,-r就是降序
-o 将排序后的结果转存至指定文件

3.使用说明-uniq

主要用于去除连续的重复行。

注意:是连续的行,所以通常和sort结合使用先排序使之变成连续的行再执行去重操作,否则不连续的重复行不能去重。

#使用格式
uniq [选项] 参数

常用选项

-c 对重复的行进行计数
-d 仅显示重复行
-u 仅显示出现一次的行

4.使用说明-tr

它可以用一个字符来替换另一个字符,或者可以完全除去一些字符,也可以用它来除去重复字符。

#使用格式
tr [选项]… SET1 [SET2]

常用选项

-d 删除字符
-s 删除所有重复出现的字符,只保留第一个

Shell编程之正则表达式-grep、sed、awk_第12张图片

Shell编程之正则表达式-grep、sed、awk_第13张图片

总结

sed、awk是编程用途最广泛的工具,功能之多,所以我们要努力掌握用法,在以后的工作中会对我们有很大的帮助。 

你可能感兴趣的:(正则表达式,linux)