1. 正(基础)则表达式概念
正则表达式是使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,简单来说, 是一种匹配字符串的方法,通过一些特殊符号,实现快速查找、删除、替换某个特定字符串
基础正则表达式是常用正则表达式最基础的部分,在 Linux 系统中常见的文件处理工具中 grep 与 sed 支持基础正则表达式,而 egrep 与 awk 支持扩展正则表达式
2. 正则表达式grep
-a 不要忽略二进制数据
-A 除了显示符合范本样式的那一行之外,并显示该行之后的内容
-b 在显示符合范本样式的那一行之外,并显示该行之前的内容
-c 计算符合范本样式的列数
-C或- 除了显示符合范本样式的那一列之外,并显示该列之前后的内容
-d 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作,-e 指定字符串作为查找文件内容的范本样式
-E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式
-f 指定范本文件,其内容有一个或多个范本样式,让grep查找符合范本条件的文件内容,格式为每一列的范本样式
-F 将范本样式视为固定字符串的列表
-G 将范本样式视为普通的表示法来使用
-h 在显示符合范本样式的那一列之前,不标示该列所属的文件名称
-H 在显示符合范本样式的那一列之前,标示该列的文件名称
-i 忽略字符大小写的差别
-l 列出文件内容符合指定的范本样式的文件名称
-L 列出文件内容不符合指定的范本样式的文件名称
-n 在显示符合范本样式的那一列之前,标示出该列的编号
-q 不显示任何信息
-R/-r 此参数的效果和指定“-d recurse”参数相同
-s 不显示错误信息
-v 反转查找
-w 只显示全字符合的列
-x 只显示全列符合的列
-y 此参数效果跟“-i”相同
-o 只输出文件中匹配到的部分
3. 查找特定字符
(1)查看包含the的行
(2)利用[ ]查找集合字符
(3)查找字母oo前不是字母w的内容
(4)查看字母oo前不是小写字母的内容
4. 查找行首与行位
(1)查看以the为行首的行
(2)查询以小写字母开头的行
(3)查询以大写字母开
(4)查看以非字母开头的行
(5)查看以点结尾的行
(6)查询空行(非空行)
5. 查找任意字符和重复字符
(1)查找包含四字符的单词的行,单词以w开头,以d结尾
(2)查询至少包含两个字母o(oo)字符串的行
(3)查找行,行中单词包含w开头和d结尾,中间至少一个字母o
(4)查询以w开头,d结尾,中间字符可有可无
(5)查询包含数字的行
6. 文本处理器sed
sed(Stream EDitor)是一个强大而简单的文本解析转换工具,可以读取文本,并根据 指定的条件对文本内容进行编辑(删除、替换、添加、移动等),最后输出所有行或者仅输 出处理的某些行。sed 也可以在无交互的情况下实现相当复杂的文本处理操作,被广泛应用 于 Shell 脚本中,用以完成各种自动化处理任务。 sed 的工作流程主要包括读取、执行和显示三个过程
读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)
执行:默认情况下,所有的 sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则 sed 命令将会在所有的行上依次执行
显示:发送修改后的内容到输出流,在发送数据后,模式空间将会被清空
7. sed常用选项
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来
-e :直接在命令列模式上进行 sed 的动作编辑
-f :直接将 sed 的动作写在一个文件内
-f filename 可以运行 filename 内的 sed 动作
-r :sed 的动作支持的是延伸型正规表示法的语法(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端
8. sed常用操作
a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :替换,可以直接进行替换的工作,通常s 的动作可以搭配正规表示法,1,20s/old/new/g 一般是替换符合条件的字符串而不是整行
y:字符转换
9. 文本处理器awk及常见用法
awk 是一个功能强大的编辑工具,逐行读取输入文本,并根据指定的匹配模式进行查找,对符合条件的内容进行格式化输出或者过滤处理
$0 表示整个当前行
$1 每行第一个字段
NF 字段数量变量
NR 每行的记录号,多文件记录递增
FNR 与NR类似,不过多文件记录不递增,每个文件都从1开始
\t 制表符
\n 换行符
FS BEGIN时定义分隔符
RS 输入的记录分隔符, 默认为换行符(即文本是按一行一行输入)
~ 匹配,与==相比不是精确比较
!~ 不匹配,不精确比较
== 等于,必须全部相等,精确比较
!= 不等于,精确比较
&& 逻辑与
|| 逻辑或
+ 匹配时表示1个或1个以上
/[0-9][0-9]+/ 两个或两个以上数字
/[0-9][0-9]*/ 一个或一个以上数字
FILENAME 文件名
OFS 输出字段分隔符, 默认也是空格,可以改为制表符等
ORS 输出的记录分隔符,默认为换行符,即处理结果也是一行一行输出到屏幕
-F'[:#/]' 定义三个分隔符
10. sort 工具
在 Linux 系统中,常用的文件排序工具有三种:sort、uniq、wc,本章将介绍前两种工具的用法
sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序,如数据和字符的排序就不一样,sort 命令的语法为sort [选项] 参数
-f:忽略大小写;
-b:忽略每行前面的空格;
-M:按照月份进行排序;
-n:按照数字进行排序;
-r:反向排序;
-u:等同于 uniq,表示相同的数据仅显示一行;
-t:指定分隔符,默认使用[Tab]键分隔;
-o: :将排序后的结果转存至指定文件;
-k:指定排序区域
11. uniq工具
Uniq 工具在 Linux 系统中通常与 sort 命令结合使用,用于报告或者忽略文件中的重复行,具体的命令语法格式为:uniq [选项] 参数
-c:进行计数;
-d:仅显示重复行;
-u:仅显示出现一次的行
12. tr工具
tr命令常用来对来自标准输入的字符进行替换、压缩和删除,可以将一组字符替换之后变成另一组字符,经常用来编写优美的单行命令,作用很强大
-c:取代所有不属于第一字符集的字符
-d:删除所有属于第一字符集的字符
-s:把连续重复的字符以单独一个字符表示
-t:先删除第一字符集较第二字符集多出的字符