shell中的文本处理(grep,sed,awk命令)
- grep 文本过滤命令
- sed 行编辑器
- awk 报告生成器
一、grep命令
- 全面搜索研究正则表达式并显示出来grep 命令是一种强大的文本搜索工具 , 根据用户指定的“模式”对目标文本进行匹配检查 , 打印匹配到的行
- 由正则表达式或者字符及基本文本字符所编写的过滤条件
grep 匹配条件 处理文件
-a 不要忽略二进制数据。 -d<进行动作> 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。 -E 将范本样式为延伸的普通表示法来使用,意味着使用能使用扩展正则表达式。 -i 忽略字符大小写的差别。 -n 在显示符合范本样式的那一列之前,标示出该列的编号。 -s 不显示错误信息。 -v 反转查找。
^ 匹配字符串开始
$ 匹配字符串结尾
例如:
grep root passwd #匹配root关键字grep ^root passwd #匹配开始字符串为root
grep root$ passwd #匹配字符串结尾为root
grep -i root passwd #忽略大小写匹配root
grep -E "root|ROOT" passwd #扩展正则表达式,匹配root或ROOT
grep 中字符的匹配次数设定
* 字符出现 [0- 任意次 ]
\? 字符出现 [0-1 次 ]
\+ 字符出现 [1- 任意次 ]
\{n\} 字符出现 [n 次 ]
\{m,n\} 字符出现 [ 最少出现 m 次,最多出现 n 次 ]
\{0,n\} 字符出现 [0-n 次 ]
\{m,\} 字符出现 [ 至少 m 次 ]
\(xy\)\{n\}xy 关键字出现 [n 次 ]
- 加上-E后可以省略转意\字符
sed 行编辑器
用来操作纯 ASCII 码的文本
处理时 , 把当 前处理的行存储在临时缓冲区中 , 称为“模式空间” (pattern space) 可以指定仅仅处理哪些行sed 符合模式条件的处理 不符合条件的不予处理,处理完成之后把缓冲区的内容送往屏幕接着处理下一行 , 这样不断重复 , 直到文件末尾
调用 sed 命令有两种形式:
- sed [options] 'command' file(s)
- sed [options] -f scriptfile file(s)
在文件sedfile中写上匹配字符
sed 对字符的处理
p 显示d 删除
a 添加
c 替换
w 写入
i 插入
- p 模式操作
- d 模式操作
- w 模式操作
- 把以UUID开始的行保存到/mnt/sedfile
- 第六行写上/mnt/sed的内容
- 2-4行写到文件/mnt/sedfile中
其他用法
= #加上行号- G #添加空行
awk 报告生成器
awk 处理机制 :awk 会逐行处理文本 , 支持在处理第一行之前做一些准备工作 , 以及在处理完最后一行做一些总结性质的工作 , 在命令格式
上分别体现如下 :
BEGIN{}: 读入第一行文本之前执行 , 一般用来初始化操作
{}: 逐行处理 , 逐行读入文本执行相应的处理 , 是最常见的编辑指令快
END{}: 处理完最后一行文本之后执行 , 一般用来输出处理结果
awk 的基本用法
awk '{print 第 "NR" 行 , 有 "NF" 列 }
awk 'BEGIN{a=0}{a++}END{print a}' passwd
awk -F : '/^ro/{print}' /etc/passwd
awk -F : '/^[a-d]/{print $1,$6}' passwd
awk -F : '$6~/bin$/{print $1,$6}' passwd
awk -F : '$7!~/nologin$/{print $1,$7}' passwd