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 将保持缓冲去的内容追加到模式缓冲区