前言
linux三剑客(grep、sed、awk)作为业界的三剑客,是对linux进行文本操作的优秀的工具,掌握好这个工具对我们操作linux文件可以提供很大的帮助。
因为许多功能是依赖于正则表达式的,所以学习三剑客工具之前先认识一下正则表达式。
三剑客分别擅长的领域为:grep 擅长查找 ,sed擅长取行和替换,awk擅长取列,分清领域更方便我们的掌握。
提示:以下是本篇文章正文内容,下面案例可供参考
一、搜索 grep
语法:grep [OPTIONS] PATTERN [FILE…]
- color=auto 对匹配到的文本着色显示
- -v 显示不被pattern匹配到的行 --取反
- -i 忽略大小写
- -n 显示匹配的行号
- -c 统计匹配的行数
- -o仅显示匹配到的字符串
- -q 静默模式,不输出任何信息
- -A # after, 后#行
- -B # before, 前#行
- -C # context, 前后各#行
- -e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file - -w 匹配整个单词
- -E 使用ERE,相当于egrep
- -F 相当于fgrep,不支持正则表达式
1、查找文件中包含root的行 + 行号
grep -n root passwd
2、查找文件中不包含root的行
grep -nv root passwd
3、查找以s开头的行
grep ^s passwd
4、查找以n结尾的行
grep n$ passwd
二、行处理 sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
语法:sed [option]… ‘script’ inputfile
1、选项
- -n 不输出模式空间内容到屏幕,即不自动打印
- -e 多点编辑
- -f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
- -r 支持使用扩展正则表达式
- -i 直接编辑文件
- -i.bak 备份文件并原处编辑
2、script地址定界
- 不给地址,对全文处理
- 单地址
#:指定的行 $:最后一行 /pattern/:被此处模式所能够匹配到的每一行
- 地址范围
#,#
#,+#
/pat1/,/pat2/
- ~:步进
- 1~2:奇数行
- 2~2:偶数行
编辑命令
- d 删除模式空间匹配的行,并立即启用下一轮循环
- p 打印当前模式空间内容,追加到默认输出之后
- a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加
- i [\]text 在行前面插入文本
- c [\]text 替换行为单行或多行文本
- w /path/somefile 保存模式匹配的行至指定文件
- r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
- = 为模式空间中的行打印行号
- ! 模式空间中匹配行取反处理
- s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
1、打印文件第二行
sed -n 2p passwd
2、打印2-5行的内容
sed -n 2,5p
3、将文件中的root全部替换
sed -i ‘s/root/abd/g’ passwd
直接修改读取的文件内容,而不是输出到终端。
s :取代,可以直接进行取代的工作。
g: 是全局的意思。其中#是格式符,他也可以是@或者别的/。
Sed替换格式是:sed -i ‘s/要替换的内容/替换成的内容/g’ 文件名。
三、列处理 awk
1、用 :分隔,打印 第一行
awk -F ':' '{print $1}' passwd
2、输出字段1,3,6,以制表符作为分隔符
awk -F ':' '{print $1,$2,$3}' OFS="\t" passwd
[awk详情参考:]https://www.cnblogs.com/xudong-bupt/p/3721210.html