sed是一种非交互性文本流编辑器,简要的说就是非交互式上下文(context),它被设计在下列三种情况发挥作用:
①编辑那些对舒适的交互式编辑而言太大的文件;
②由于编辑命令太复杂而难于在交互模式下键入的时候编辑任何大小的文件;
③要在对输入的一趟扫描中有效的进行多个“全局(global)”编辑函数。
相较于交互式编辑器而言,根本性的损失是缺乏相对地址(由于每次操作一行),和缺乏对命令如期运行的立即验证。
1.sed是如何读取数据的
sed从文本的一个问本行或从标准输入的几种格式中读取数据,将之拷贝到一个编辑缓冲区,然后读命令或脚本的第一条命令,并使用这些命令查找模式或定位行号编辑它。
2.使用方式:
①命令行:sed [options] sed命令 输入文本
②脚本方式:sed [options] -f sed脚本文件 输入文本
3.选项
-n #不打印所有,默认打印所有,只有被sed处理的那行被打印出来
-c #在使用多个编辑命令时使用,代表-c后面的也是编辑命令
4.function:
p #打印匹配行
= #显示文件行号
a\ #在定位行后附加新文本信息
i\ #在定位行后插入新文本文件
d #删除定位行
c\ #用新文本替换定位文本
s #使用替换模式替换相应模式
r #从另一个文件中读文本
w #写文本到另一个文件
q #第一个模式匹配后退出或立即退出
{} #定位行执行命令组
g #将模式2粘贴到/pattern n/
5.实例
#打印1到3行
sed -n '1,3p' passwd
#打印3到尾行
sed -n '3,$p' passwd
#只打印包含user的行
> sed -n '/user/p' passwd
#打印包含user的行号
> sed -n '/user/=' passwd
#打印行号和行
> sed -n -e '/user/=' -e '/user/p' passwd
#删除首行和尾行
> sed -e '1d' -e '$d' passwd
#替换abc为def
> sed "s/abc/def/" $sql_script > $sql_temp