sed

sed:Stream Editor,行编辑器
默认基本工作模式:

一次从文本中读取一行,读取出来后放再sed自己所用到的内部缓冲区中(patter space:模式空间),在模式空间完成编辑后将编辑后的内容打印至屏幕上
在没指地址定界时每一行都匹配。

用法:

sed [OPTION]...  'script' [inputfile]...
常用选项:
	-n:静默模式,不输出模式中的内容只屏幕
	-e:多点编辑:
	-f:/PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本
	-r:支持使用扩展正则表达式
	-i:原处编辑
地址定界:
(1)不给地址,对全文进行处理
(2)单地址:
	#:指定的行
	/pattern/:被此处模式所能够匹配到的每一行
(3)地址范围:
	#,#
	#,+#
	/pat1,/pat2/
	#,/pat1/
编辑命令:
	d:删除
	p:显示模式空间中的内容
	a \text:在行后面追加文本,支持使用\n实现多行追加
	i \text:在行前面插入文本,支持\n多行插入
	c \text:替换行为单行或者多行文本
	w /path/from/somefile:保存模式空间匹配到的行只指定文件中
	r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后
	=:为模式空间中的行打印行号
	!:取反条件
	s///:查找替换,支持使用其他分隔符,s@@@,s###
		替换标记:
			g:行内全局替换
			p:显示替换成功的行
			w /path/to/somefile:将替换成功的结果保存至指定文件中

高级编辑命令:
hold space(保持空间):作为辅助的一个缓冲区,可以和模式空间进行交互,但是命令不能直接作用于保持空间。
h:把模式空间中的内容覆盖至保持空间中
H:               追加
g:把保持空间中的内容覆盖至模式空间中 
G:                追加
x:模式空间的内容与保持空间内容互换
n:读取匹配到的行的下一行至模式空间(覆盖)
N:追加
d:删除模式空间的行
D:删除多行模式空间中的所有行

举个栗子:
*1)删除第1行至第4行 *
这里写图片描述
2)显示以UUID开头的行
错误做法:
可以看到不使用-n时会把整个文件显示出来,而且被匹配到的内容显示了两次,因为默认会把模式空间所有内容都显示,而p命令又把匹配到的行显示了一次,所以就有两次显示
在这里插入图片描述
正确做法:使用-n指定静默模式
在这里插入图片描述
3)在匹配到的行后面追加 hello sed
这里写图片描述

这些追加上去的hello sed单独成行,我们可以使用-n进行测试
在这里插入图片描述

多行追加:
这里写图片描述

还可以使用\t
在这里插入图片描述
4)把文本添加到匹配到的行的前面
这里写图片描述

5)将匹配到的行替换
这里写图片描述

6)将以#开头的行的定向到fstab.txt文件中
这里写图片描述
这里写图片描述

7)显示以0结尾的行号
这里写图片描述

8)将/etc/issue的内容显示到匹配行的下面
这里写图片描述
这里写图片描述
这里写图片描述

9)删掉不以UUID开头的行(!是对匹配到的内容取非)
这里写图片描述

10)将r开头,中间任意两个字符,t结尾的字符串,替换成ROOT
这里写图片描述
默认只替换每行匹配到的第一个字符串
这里写图片描述
使用-g可以进行全局替换
这里写图片描述

11)将r开头,中间任意两个字符,t结尾的字符串,后面加er
&表示引用前面匹配到的字符串
这里写图片描述
12)在替换时将替换的行显示出来
这里写图片描述
练一练:
删除/boot/grub/grub.conf文件中的所有以空白开头的行行首的空白字符

[root@foundation44 tmp]# sed 's/^ \+//' grub.cfg 
[root@foundation44 tmp]# sed 's/^[[:space:]]\+//' grub.cfg

删除/etc/fstab中左右以#开头的后面至少跟一个空白字符的行行首的#和后面的空白字符

[root@foundation44 tmp]# sed 's/^#[[:space:]]\+//' fstab
[root@foundation44 tmp]# sed -i 's/^# \+//' fstab

输出一个绝对路径给sed命令,取出其基名

[root@foundation44 tmp]# echo "/tmp/fstab/xixi/hahah/" | sed 's#[^/]\+/\?$##'

关于patter space 和 hold space的使用
我们现在有一个haha的文件,内容如下
这里写图片描述

1)显示文件偶数行

[root@foundation44 tmp]# sed -n 'n;p' haha

这里写图片描述
分析:

由于没有指定界定符,所以从第一行开始读取
1被匹配到,2读入模式空间
由于第二行已经在模式空间,所以从第三行开始匹配,3被匹配到,4读入模式空间
5被匹配到,6读入模式空间
p显示出来模式空间的内容,所以为2,4,6

2)逆向显示文件中的内容

[root@foundation44 tmp]# sed '1!G;h;$!d' haha

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值