sed基本用法

1.sed介绍及工作流程

很多时候我们在linux下面都需要去编辑一些文件。我们所使用的编辑器一般都是vi/vim,vi/vim属于屏幕编辑器,所谓屏幕编辑器是说,我们编辑一个文件的时候,需要把这个文件打开,这里面存在2个问题:1.因为我们需要把这个文件打开,如果说一个较大的文件的话,将会消耗很多的内存。2.当我们在编辑文件的时候,必须要互动,这样的话如果我们在写脚本的时候,是很难调用vim。这个时候我们就需要使用其他的编辑器,sed就是其中一种。

sed属于流编辑器,所谓流编辑器是这样的,sed在编辑文件的时候,首先会把文件的一行内容读入到内存,然后根据我们的需要来进行编辑,读到内存的这部门,我们称为模式空间,修改完,会把模式空间的内容输出到屏幕,然后把模式空间里面的内容清空。读取下一行到模式空间。这样的话就避免了一次性读取整个的文件。

2.sed的基本命令

sed的语法是:sed '范围 操作命令' file

如果说范围我们没有指定的话,那么将会对全文每行进行操作。

有时候我们需要指定操作范围。指定范围的方法有两种:1.直接写一个数字,表示对多少行进行操作。

注意:为了讲解的方便,我们首先来看一个命令d,d是用来删除的

sed '2d' aa这句话的意思是删除文件aa的第二行。如果要删除最后一行:sed '$d' aa

第二种指明范围的方法是正则表达式,如果我们使用正则表达式来表示范围的话,必须要用//来隔开,比如:

sed '/^root/d' aaa,这句命令表示要删除开头为root的行。

 sed'1,4d' aa,这句命令表示删除第一行到第四行。

 

 

上图的意思是删除第一个包含root的行到第一个包含sync的行,之间所有的行。

我们还有其他命令可以使用,首先我们查看s,s是代替的意思:

sed '范围s/被替换的字符/新字符/标记' file

如果说没有指定范围的话,将会对全文进行操作:

把文件中的rhce全部替换成RHCE。因为我们没有指定任何模式,所以它只会对每行的第一个关键字进行替换。如果说我们想替换所有的,或者替换个别的,我们可以使用标记:

标记g的意思是对每行所有的关键字都要进行替换。如果没有指定g的话,默认只会替换第一个,那如果我们想替换第二或第三个那该如何来完成?

sed 's/rhce/RHCE/2' bb

在标记的位置上我们只要写上一个数字,表示替换模式空间中第几个关键字。

我们在执行替换操作的时候,不一定飞的使用/来隔开,可以使用其他任意字符,比如#.

sed '1s#:#---#3' bb,这个(#)替换只能在s中生效。

 

sed '范围s/被替换的字符/新字符/标记' file ,在这里老字符部分是支持正则表达式的,但是在新字符的位置是不支持正则表达式的,没有什么特殊字符除了\n、\&

&在替换字符部分是有意义的,代表的意思是引用前面的老关键字。

刚才我们已经讲了两个命令一个d和s,如果我们对特定的范围做多个操作的话,那么我们需要把这多个操作用{}括起来,用;隔开多个命令:

这个命令首先把第一行的rhce全部替换成RHCE,在把第一个RHCE替换成XXX。

 

从这些操作中我们可以看到,sed它读取文件中的一行,然后操作,操作完成之后,我会把结果显示在屏幕中,如果说我们想看模式空间里面内容的话,可以使用p.

除了正常显示文件所有内容外,还特别的显示模式空间里面的内容。如果我们不想在屏幕输出没有编辑过的那些文件,只要给sed加上 -n就可以了。

刚才我们所讲的是替换一个单词。如果说我们只想替换单个字符的话,我们可以使用y命令:

a替换成x,b替换成y,c替换成z,有一一对应的关系。而不是将abc整体替换成xyz。

 

a\意思是追加,在关键词后面加上一行内容:

这个命令的意思是在含有DEVICE这行下面新增XXXXXXX这么一行内容。

i\意思是在关键词的上一行产生一行内容。

sed '/DEVICE/i\XXXXXXXXXXXXXX' ifcfg-eth0

 

如果我想修改某行内容的话,可以使用c\。

sed '/ONBOOT/cONBOOT=yes' bb

这句话的意思是把含有ONBOOT的这行内容替换成ONBOOT=yes.

 

大家要记住一点,以上所有操作都是在模式空间里面做的,并没有改变源文件内容。如果说我们想改变源文件内容,只要对sed加上-i选项就行了。

当我们加上-i选项,屏幕上并没有任何输出,因为这样操作的话,它直接改变了源文件的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值