sed
简介:
sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
sed 编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:首先 sed 把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed 每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed 便结束运行。sed 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。
参数解释:
-n :使用安静(silent)模式。在一般
sed
的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。
但如果加上 -n 参数后,则只有经过
sed
特殊处理的那一行(或者动作)才会被列出来。一般跟(p参数结合使用)
-e :直接在命令列模式上进行
sed
的动作编辑;
-f :直接将
sed
的动作写在一个文件内, -f filename 则可以运行 filename 内的
sed
动作;
-r :
sed
的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。
动作:
a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(匹配行的下一行)
c :替换行,将匹配的行替换为指定字符“
test
”
d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(匹配行的上一行);
p :打印,即将某个选择的数据印出。通常 p 会与参数
sed
-n 一起运行
s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s
/old/new/g
一般是替换符合条件的字符串而不是整行
! : 条件取反,一般用于模式之后,命令之前
g:是全局替换
sed高级用法:模式空间与保持空间
模式空间:sed处理文本内容行的一个临时缓冲区,模式空间中的内容会主动打印到标准输出,并自动清空模式空间
保持空间:sed处理文本内容行的另一个临时缓冲区,不同的是保持空间内容不会主动清空,也不会主动打印到标准输出,而是需要sed命令来进行处理
h : 把模式空间中的内容覆盖至保持空间中
H : 把模式空间中的内容追加至保持空间中
g : 把保持空间中的内容覆盖至模式空间中
G : 把保持空间中的内容追加至模式空间中
x : 把模式空间中的内容到保持空间中的内容互换,初始保持空间中为空
n : 读取下一行覆盖模式空间中的行
[root@localhost ~]# seq 4 | sed '2!G'
1
2
3
4
=============================
这个命令的含义是 只有第二行不执行G的命令 其他行全部执行
模式空间 保持空间
1 0
G
1,0 输出
2 输出 0
3 0
G
3,0 输出 0
4 0
G
4,0 输出 0
##0表示空白