在Linux中有几种常用的文本处理工具,今天来梳理一下grep、sed、awk,这几种工具的用法
grep
用途:在文件中查找并显示包含指定字符串的行
格式:grep [选项] 查找内容 目标文件
-i:查找时忽略大小写
-v:反转查找,输出与模式不相符的行
-w:按整字查找
-n:显示符合模式要求的行号
-r:递归搜索所有文件(一般用于目录)
-o:只打印匹配的字符串
以上几种选项仅是grep选项的基本命令查找操作,我们也可以使用正则表达式来搜索文本,同时也支持扩展正则(需要加 -e选项)
sed
sed是一种支持正则的非交互式流编辑器,在使用sed工具时会有默认的输出,也可以屏蔽默认输出
sed的语法命令格式
sed [选项] sed编辑命令 输入文件
sed的常用选项
-n:只显示匹配处理的行(否则会输出所有,屏蔽默认输出)
-e:执行多个编辑命令时(一般用;代替)
-i: 直接在文件中进行修改,而不是输出到屏幕
-r:支持扩展正则表达式
-f:从脚本文件中读取内容并执行(文件中的编辑命令每行一个不要;隔开)
sed 的常用编辑命令
p:打印匹配行
d:删除指定行
a:在匹配行后面追加
i:在匹配行前面插入
c:整行替换
r:将文件的内容读入
w:将文本写入文件
s:字符串替换
这里以p、s 编辑命令示例
awk
awk的命令工作原理与sed一样,均是一行一行的读取,处理。sed作用于一整行的处理,而awk将一行分成数个字段来处理。
awk使用方法
awk的用-F来指定分隔符
默认的字段分隔符是任意空白字符(空格或者TAB)
举例对比cut和awk的区别
awk的数据字段变量
$0表示整行文本
$1表示文本中第一个数据字段
$2表示文本中第二个数据字段
$n表示文本中第n个数据字段
awk的命令的执行过程
执行BEGIN{commands}语句块中的语句
从文件或stdin中读取第1行,
有无模式匹配, 若无则执行{}中的语句,
若有则检查该整行与pattern是否匹配, 若匹配, 则执行{}中的语句,
若不匹配则不执行{}中的语句,接着读取下一行
重复这个过程, 直到所有行被读取完毕
执行END{commands}语句块中的语句
awk命令的操作符
正则表达式和bash一致
数学运算:+,-,*,/, %,++,- -
逻辑关系符:&&, ||, !
比较操作符:>,<,>=,!=,<=,== ~ !~
文本数据表达式:== (精确匹配)
~波浪号表示匹配后面的模式
who | awk '$2 ~ /pts/{print $1}‘
awk -F: ‘$3 ~ /<…>/ {print $1,$3}’ /etc/passwd
seq 100 | awk ‘$1 % 5 == 0 || $1 ~ /^1/{print $1}’
awk -F: ‘$1 == “root”{print $1,$3}’ /etc/passwd
以上只是简单介绍了这几种工具的用法,需要更深入的学习