linux中sed的学习和使用
今天突然用到了sed这个命令,就即兴学习了一波突然感觉这个功能还是很强的。sed在#man sed下文档查看解释的是:用于过滤和转换文本的流编辑器。即如下图:
我自己用过这个命令之后感觉对于文档来说可以显示某个区间行,显示结果还可以在段前后添加内容删除,替换内容。但是最后才发现,怎么还能直接修改到文件里不仅仅是显示出来,文件内容直接被修改了。
下面就一一介绍这个有趣的命令,莫急莫急一个一个来。
首先找个文件(没用的文件且有内容,搞坏了系统文件可不好玩了)来当测试文件。本人就cp(拷贝)了一个/etc/shadow文件来当测试文件.
命令One:不显示区间行(例如不显示2-10行)
命令:cat -n shadow |sed '2,10d' →引号引住范围英文逗号隔开d加在结束区间(cat查看文件 –n标号显示)
这样是不是可以排除掉很多不想看的内容行,这样显示并不改变文件内容。
都能屏蔽一些内容,亦能添加一些内容并且也是不修改原文件内容的。
命令Two:cat -n shadow |sed '3a 添加新内容'
sed依旧跟上引号但是这次不是范围,数字表示行a等于after的缩写,表示在行后添加。
既然能在行后,那就也能在行前添加,
命令如下:cat -n shadow |sed '3i 添加新内容'
其实见过行后添加了感觉这个命令就是划水的,没什么卵用啊,说着在三行前添加那不是在第二行后添加吗!但是就是有这样的命令形式。
行后行前都添加了,一想到我想要连续在行后添加两行怎么办!突然摸不着头脑0.0 ,查了一波man莫慌!脑袋还在!
在linux命令行界面中,一些命令如果缺少选项或者参数的话系统认定会报错或者认定输入并没有结束还会让输入,我去拿个栗子举起来!
上面的cat命令就是一个很好的例子,输入cat敲击回车但是什么都没输出,继续回车不断换行,也就是所谓的命令不完整,系统等待继续输入。
参照这个例子,sed命令多行添加显示就很好懂了
(纯属个人想法)我自己认为这个跟上面的cat类似,引号是成对的没有第二个引号结束,系统认定还要继续输入在\后面直接敲击回车输入第二行(甚至第三行,第N行)以引号结束。
我自己试了一下不换行输入的结果:结果就是系统认定引号中间只为一段字符串只是添加了一行。
(行前行后数字后面的a换成i就可以了,这里就不做演示了) 偷偷懒一波^.^
替换命令:cat -n shadow |sed '3,5c 替换这么多行 '
还有一种比较简单的命令提及一下,那就是替换。顾名思义就是替换某行或者多行。以下例子来看命令具体实践内容。
学习完上面的再来看这个其实比较简单了,也不做多解释了。 (日常懒一波QAQ)
显示区间行:cat -n shadow |sed -n '3,8p'
这里使用到了sed命令的-n,该选项的意思是:安静模式。
若是不加该选项则区间内容会重复显示,sed该命令本来就是显示内容,加上后缀'3,8p'(显示区间行)则默认重复显示,如下图不加选项-n的示例。
所以要加上选项-n
搜寻替换:cat shadow |sed 's/:/?/g'
sed还有一种替换,该替换不是某行替换。而是字符串替换其他字符串,且是全文符合的内容全部替换。
了解linux的都知道shadow文件是用来存储密码的root只读文件,内容都是:(冒号)间隔,我用该命令把全文冒号替换成?(问号)。这个替换跟上面的替换不一样,忘记了的看上面吧!
直接修改:sed -I ‘s/yuanwen/huanhou/g’
我在当前目录下有个垃圾文件kong文件,实验文件。
要把该文件用sed命令直接修改,修改后如图:
这个-i的选项最后要跟上文件名的(少了文件名怎么知道改什么文件QAQ,好像说了一句废话)。
!!!注意:一般很少修改源文件,慎用!练习还是自己cp(拷贝)一个文件来练习是最好的。
该命令我自己感觉有个好处是不用编辑器就能直接修改文件,知道要修改的内容和位置用sed来修改岂不是省事多了。
以上差不多就是常用的sed用法,剩下的欢迎补充。等我遇到了还能来这里冲一波电,完善一下,不足之处多多包涵欢迎留言指出错误和不足!