sed

#grep/find  sed awk
sed是一款流编辑工具
针对文本进行过滤,替换操作(vim)
在大批量场景下相当实用
文本来自于本地文件,标准输入(包括键盘输入,文件重定向,字符串,变量,管道文件)

sed工作流程

文件------>(模式空间)sed指令集--------->显示屏幕/重定向输出

sed通过一次仅读一行内容来对某些指令进行处理后输出(更适合于大数据文件)

首先,sed通过文件或管道读取文件内容,但 sed不会直接修改源文件,而是将数据读入的内容复制到缓冲区,这部分缓冲区称之为模式空空间(pattern),所有的指令操作都在模式空间进行,然后sed根据相应的指定对模式空间内容进行相应输出,默认情况下为标准输入(打印到屏幕)

sed使用场景

1.编辑相对交互式文本编辑器(vi,gedit)而言太大的文件
2.编辑命令过于复杂,在交互式文本编辑器中难以输入的情况
3.对文件扫描一遍,但是需要执行多个编辑函数的情况

sed基本语法

sed从文件中读取数据,若没有文件,则默认标准输入进行处理

1.在shell中输入命令调用sed
格式: sed [选项]....{脚本指令}[输入文件] ...
选项:
	--version	显示sed版本信息
	--help		显示帮助信息
	-n	--quiet, --silent   静默输出,默认情况下sed程序在所有的脚本指令			执行完毕后,将自动打印模式空间的内容,-n屏蔽自动打印
	-e script   允许多个脚本指令呗执行	
	-f  script-file	从文件中读取脚本指令,
	-i[SUFFIX], --in-place[=SUFFIX]  将修改内容直接修改为源文件(谨慎使用)	
	-r  在脚本中使用扩展正则表达式
	-s, --separate  默认情况小爱,sed将输入的多个文件作为一个长的连续的输入流,而GNUsed则把他们当作单个文件

2.将sed命令插入脚本文件后通过sed命令调用
		
	格式:sed [选项] -f script-file 输入文件

3.将sed命令插入到脚本文件,让该脚本可执行,直接执行该脚本文件
	./sed脚本文件 [输入文件]

注意:第三种方式的脚本文件与第二种方式有所不同,第三种脚本文件需要以sha-bang(#!)符号开头,sha-bang后面跟脚本的程序名

若没有指定输入文件,sed将从标准输入中接收,
	-n	不打印所有行到标准输出
	-e 允许多个脚本指令被执行
	-f	从文件中读取脚本指令

sed定位和编辑

sed命令由定位文本行和sed编辑命令俩部分组成

sed编辑命令对定位文本进行操作,sed定位方式主要有俩种
1.行号,指定一行或者多行范围
2.使用正则表达式

sed命令定位文本方法:

a	a指定行号
a,b	指定a-b行范围 sed -n '4,9p' 1.txt
/pattern/	查看包含的行
/pattern/pattern/	查看包含俩个匹配的行
/pattern/,x		从paeertn包含行到x行之间的行
x,/pattern/		从x行到pattern包含行
x,y!	不包含x,y行

sed编辑方法

主要为增删改查打印

p	打印匹配的行
=	打印文件行号
a\	在定位行号之后追加文本信息
i\	在定位行号之前插入文件信息
d	删除定位行
c\	替换定位行
s	使用替换模式替换相应模式
r	从另一个文本中读入文本
w	将文本写到一个文件
y	变换字符
q	第一个模式匹配完成后退出
g	将保持缓冲区的内容复制到模式缓冲区
G	将保持缓冲去的内容追加到模式缓冲区