三剑客包含:grep sed awk,此章节为sed
相比于grep过滤查询,sed除查询外,更偏向处理数据,实际工作中,在大型文件不适合打开编辑再保存的前提下用sed直接修改某一处更加简便,也避免了大型文档修改保存时间长有数据丢失的情况。
sed工作原理
sed 是一种在线的、非交互式的编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

特点
( 1)非交互,基于模式匹配的过滤及修改文本。
(2)逐行处理,太大的文件使用sed会显得格外有优势。
(3)可实现对文本的输出、删除、替换、复制、剪切、导入、导出等各种编辑。
(4)脚本化,在Shell脚本编程中使用sed比vim方便。
sed命令常见选项
-n  | 静默模式,屏幕不再全部显示,只显示经过sed特殊处理的那一行  | 
-e  | 允许在该选项后加一条新的编辑指令  | 
-f  | 将sed的操作写在一个文件内  | 
-r  | 支持扩展正则表达式 -I 正则  | 
-i  | 直接修改读取的文件内容 而不是由屏幕输出 用于编辑修改  | 
-h  | 输出帮助信息  | 
常见command选项
a\  | 新增,a后可以接字串,字串会在下一行出现 \是转义回车的作用 sed -r '2a\ 1111\ 3333333\ 444444' passwd 第2行开始加入这3行  | 
c\  | 替换整行或多行 # sed -r '2caaaaaaaa' passwd 将第二行替换为aaaaaaa  | 
d  | 删除 # sed -r '3,$d' passwd 删除第三行到最后一行  | 
i\  | 插入内容 # sed -r '2iaaaaaaaa' passwd 在原本第二行之前插入这行aaaaaa  | 
p  | 打印,由于默认就会输出处理后的内容所以加了打印会每一行输出两次?  | 
s  | 查找替换 # sed -r 's/root/aofa/g' passwd 替换全部root  | 
n  | 获取下一行输入行,用下一个命令处理新的行而不是第一个命令  | 
!  | 反向选择未选定的行  | 
暂存空间hHGg
暂存和取用命令:h覆盖暂存空间 H追加暂存空间 g覆盖行 G追加行

实战举例
# sed -r '/^#/d' /etc/samba/smb.conf  | 删除配置文件中#号注释行  | 
# sed -r '/^[ \t]*$/d' space.txt  | 删除无内容空行  | 
# sed -ri '$a\chroot_local_user=YES' /etc/vsftpd/vsftpd.conf  | 在最后一行后新插入一行新字符串  | 
# sed -r '2,6s/^/#/' a.txt  | 找到2到6行,把开始换成#  | 
# sed -r "1a$var1" /etc/hosts  | sed中使用外部变量  | 
# sed -r '/^bin/5,d' space.txt  | 以bin开头的行 删除到第5行  | 
# sed -r '/root/!d' space.txt  | 除root外的其他行都删除  | 
# sed -r '1~2d' space.txt  | 删除所有奇数行,从1行开始每隔2行删除  | 
# sed -r ‘1,5s/(.*)/#\1/' space.txt  | 指定行前边加#号  | 
# sed -r '/adm/{n;s/sbin/uuu/}' space.txt  | n获取下一行 搜索adm的下一行把sbin替换成uuu  | 
# sed ’1!G;h;$!d‘ space.txt  | 将txtx文件内容倒序,原文本行顺序倒写  | 









