三剑客包含:grep  sed  awk,此章节为sed

相比于grep过滤查询,sed除查询外,更偏向处理数据,实际工作中,在大型文件不适合打开编辑再保存的前提下用sed直接修改某一处更加简便,也避免了大型文档修改保存时间长有数据丢失的情况。

sed工作原理

sed 是一种在线的、非交互式的编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

正则表达式 三剑客--sed_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_暂存空间_02

实战举例

# 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文件内容倒序,原文本行顺序倒写