文本处理三剑客和正则表达式
本片文章将会有以下内容
grep :文本过滤工具
sed :文本流编辑工具
awk :文本报告生成器
正则表达式
由一类特殊字符及文本字符所编写的模式,这些字符不表示字面意义,而是表示控制或通配功能
分两类 :
基本正则表达式 BRE
扩展正则表达式 ERE
grep文本过滤工具
grep支持基本正则表达式
egrep 支持扩展正则表达式
fgrep 不支持正则表达式
作用:根据用户指定的 “模式(过滤条件)”对目标文本逐行匹配检查,打印匹配到的行
模式:由正则表达式的元字符及文本字符所编写出的过滤条件
语法: grep [OPTIONS] PATTERN [FILE...]
常用选项
-v : 反过滤
-i :不区分大小写
-o :只显示匹配到的字符串
-q :静默执行
-A 2 显示匹配到的行下2行
-B 2 上2行
-C 2 上下各2行
sed文本流编辑工具
sed [OPTION]... 'script' [input-file]...
常用选项
-n 阻止默认全输出
-e 指定多个地址定界编辑命令
-f FILE (编写时每行一个编辑命令,当编辑命令过多时使用)
-r 扩展正则表达式
-i 编辑源文件
script :地址定界编辑命令
地址定界
1.空地址:
对全文进行处理
2.单地址:
'*' : 指定行
'/pattern/' 被模式匹配到的每一行
3.地址范围
'*,*' 指定的第几行和第几行
'*,+*' 指定的行后下面第几行
4,指定步长
'*~*'
编辑命令
d: 删除
p: 打印
=: 打印行号
!: 条件取反
s///: 查找替换 g全局替换 p只显示替换成功的行
a \text: 在行后追加text 支持\n 实现多行追加
i \text: 在行前追加text 支持\n 实现多行追加
c \text: 把匹配到的行替换为指定text
w /file: 保存到指定的文件中 保存文件
r /file: 将文件中的内容插入到匹配行后 文件合并
awk 整理完补齐
正则表达式
基本正则表达式元字符:
字符匹配
. :匹配单个字符
[ ] :匹配指定范围内的任意单个字符
[^ ] : 匹配指定范围外的任意单个字符
[[:digit:]] 所有的数字
[[:lower:]] 所有小写字符
[[:upper:]] 所有大写字符
[[:alpha:]] 所有字符
[[:alnum:]] 所有字符和数字
[[:punct:]] 所有符号
[[:space:]] 空白字符
[[:blank:]] 空格和制表符
次数匹配
* 匹配前面的字符匹配任意次
\? 匹配前面的字符一次或零次
\+ 匹配前面的字符至少一次
\{m\} 匹配指定次数
\{m,n\} 匹配至少m次至多n次
\{0,n\} 匹配多n次
\{n,0\} 匹配至少n次
位置锚定
^ 行首
$ 行尾
\< 词首锚定
\> 词尾锚定
分组
\(ha\)* 如果不加 \( \)则*只会对a匹配任意次
分组括号中的字符会被正则表达式引擎自动记录于内部变量中
\1 第一个括号匹配到的内容
\2 第二个括号匹配到的内容
.....
示例
有一个文件 他的内容如下
HE loves hls love
HE likes hls love
she likes her liker
she loves her liker
使用 l..e作为模式会匹配全部的内容
cat love.txt | grep "l..e"
HE loves hls love
HE likes hls love
she likes her liker
she loves her liker
这里使用后向应用:引用前面分组括号中匹配到的字符
cat love.txt | grep "\(l..e\).*\1"
HE loves hls love
she likes her liker
或
a|b a或者b
C|cat C或者cat
(C|c)at Cat或者cat
扩展正则表达式在使用一些元字符时可以不用转义 ( ? + {} () | )
也有人这样理解
“基本正则表达式(BRE)和扩展正则表达式(ERE)的区别仅仅是元字符(meta charactor)的区别而已。(对,就是这么简单)”
BRE:只有^$.[]* 是元字符
ERE:^$.[]*+(){}?|都是元字符
文本查看及处理工具
wc: 统计文件的行数、单词数、字符数
wc [OPTIONS] FILE...
常用选项
-l 仅显示行数
-w 仅显示单词数
-c 仅显示字节数
cut 显示特定字段
cut OPTIONS.. [FILE]
常用选项
-d 'CHAR' 以制定字符为分隔符
-f FILEDS 显示特定字段
1 : 指定单个字段
1-5 : 连续多个字段
2,4 : 指定字段
sort 排序
sort [OPTIONS]... [FILE]...
常用选项
-t 指定分隔符
-k * 用于排序比较的字段
-n 根据数值大小进行排序
-r 逆序排序
-f 忽略字符大小写
-u 重复的行只保留一份
uniq 报告或移除重复的行
uniq [OPTIONS]
常用选项
-c 统计每一行重复出现的次数
-u 仅显示未重复行
-d 仅显示重复过的行
diff 生成补丁
diff FILE1 FILE2 > PATH.FILE
常用选项
-u 显示要求改的上下文 默认3行
patch 向文件打补丁
patch -i PATH.FILE OLDFILE
patch OLDFILE < PATH.FILE