一.正则表达式
1.定义
通常用来判断语句中,用来检查某一字符串是否满足某一格式。
2.组成
正则表达式是由普通字符与元字符组成
普通字符:包括大小写字母、数字、标点符号及一些其它符号。
元字符:是指在正则表达式中具有特殊意义的专用字符,可以用来规定其前导字符(即位于元字符前的字符表达式)在目标对象中的出现模式。
3.常见的基础正则表达式元字符:(支持工具:grep、egrep、sed、awk)
举例:^匹配开头,$匹配结尾
举例: . 和 *
二.文本三剑客之grep
1.简介:
grep是Linux中用来过滤文本文件内容的命令,使用该命令能够高效的从文本信息中过滤出符合条件的文件行。
grep 与 awk 、sed并称为linux下文本处理三剑客,grep用于过滤文本信息,sed用于动态编辑文本,awk用于格式化输出文本。
grep [选项]… 查找条件 目标文件
- -i:查找时忽略大小写
- -v:反向查找,输出与查找条件不相符的行
- -o 只显示匹配项
- -f 对比两个文件的相同行
- -c 匹配的行数
举例:
三.文本三剑客之sed
1.概述
sed 即 Stream EDitor,和 vi 不同,sed是行编辑器。
- sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
- sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。
sed工作流程
-
sed 的工作流程主要包括读取、执行和显示三个过程:
-
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。
-
执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。
-
显示font> :发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。
注意:
-
在所有的文件内容都被处理完之前,上述过程重复执行,知道所有内容被处理完。
-
默认情况下所有的sed命令都是在模式空间内执行的,因此输入的文件并不会
-
发生任何变化,除非是用重定向存储输出。
常用选项:
四.文本三剑客之awk
1.概述。
- AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
- 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
2.awk工作原理
- 逐行读取文本,默认以空格或TAB键为分隔符进行分割,将分割所得的各个字段保存到内建变量中,并按照或条件进行编辑命令。
- sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的,执行结果通过print的功能将字段数据打印显示。
- 在使用awk命令过程中,可以使用逻辑操作符“&&”表示“与”、“||”示“或”、“!”表示“非”还可以进行简单的数学运算。如+、-、*、/、%、^分别表示加、减、乘、除、取余、和乘方。
3.awk命令格式
awk 选项 '模式模式条件 {操作}' 文件1 文件2 ...
awk -f 脚本文件 文件1 文件2 ...
4.awk常见的内建变量(可直接使用)与选项
awk 常用选项:
-F | 指定输入文件折分隔符。 |
---|---|
-v | 赋值一个用户定义变量。 |
-f | 从脚本文件中读取awk命令。 |
5.awk的基础用法
5.1输出所有内容。逐行读取,$0表示当前行的整行内容。
5.2 NR表示当前处理的行的行号(序数)
5.3 $n 表示当前处理行的第n个字段
5.4 通过文本模式(匹配字符串)过滤出行
5.5 按字段(列)输出内容
注:指定列分隔符的两种方式:使用-F 或 使用内建变量FS。
5.6 使用if语句时,内部条件要加( ),外面要加{ }。
将{ }整条语句当作一个操作命令,相当于嵌套。
5.7 字符串作用
$NF 代表最后一个字段
~ 表示包含,
!~ 表示不包含,
== 表示等于,
!= 表示不等于
$n> < == 用于对比数值
$n~"字符串" 代表第n个字段 包含 某个字符串的作用
$n!~"字符串" 代表第n个字段 不包含 某个字符串的作用
$n=="字符串" 代表第n个字段 为 某个字符串的作用
$n!="字符串" 代表第n个字段 不为 某个字符串的作用
6.awk的高级用法
6.1 RS 指定行分隔符
awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录, 而awk一次仅读入一条记录进行处理,内置变量RS的预设值是"n"。
6.2 通过管道符处理其他命令的结果
举例:
6.3 使用awk去重(awk数组特性)
在awk中可以定义数组,数组元素的下标值可以是字符串,元素值如果是字符串也要加引号。