关于linux中sed命令的简单用法

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用法,剩下的欢迎补充。等我遇到了还能来这里冲一波电,完善一下,不足之处多多包涵欢迎留言指出错误和不足!

时间: 2024-08-02 07:03:34

关于linux中sed命令的简单用法的相关文章

Linux中awk命令的简单用法

一.用例1: cat /proc/meminfo|grep "MemTotal"|awk '{print $2}' 说明,$2表示第2位,$0表示全部,如需表示$,可用$$转义.

12个 Linux 中 grep 命令的超级用法实例

12个 Linux 中 grep 命令的超级用法实例 你是否遇到过需要在文件中查找一个特定的字符串或者样式,但是不知道从哪儿开始?那么,就请grep来帮你吧. grep是每个Linux发行版都预装的一个强有力的文件模式搜索工具.无论何种原因,如果你的系统没有预装它的话,你可以很容易的通过系统的包管理器来安装它(Debian/Ubuntu系中的apt-get和RHEl/CentOS/Fedora系中的yum). $ sudo apt-get install grep #Debian/Ubuntu

转:Linux中find命令-path -prune用法详解

在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0.dir1和dir2 ...等目录及dir00.dir01...dir10.dir11...等子目录. 1. 在当前目录下查找所有txt后缀文件 find ./ -name *.txt 2.在当前目录下的dir0目录及子目录下查找txt

linux中sed命令的使用(绝对精华版)

sed命令是linux或者shell编程中常用的筛选.替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的 下面把sed主要的用法列出来(有错误的地方大家可以指正): p命令只打印第三行,没有-n会在第三行后多打印第三行:sed -n '3p' filename 只打印最后一行:sed -n '$p' filename 只打印10到20行(包括10和20行,若后面数字小于前面数字,则只打印前面数字的行):sed -n '10,20p' filename 打印包含My在行尾的行

简述linux中sed命令

sed命令:Stream EDitor 流编辑器 sed命令的工作流程: sed会复制原文件中的一行或者多行,逐行进行操作.首先会将该行的内容放入到模式空间内,在模式空间内进行定界或者正则表达式匹配操作. a.如果该行内容不符合正则表达式或定界,该内容则被判断为No,进行标准输出. b.如果该行内容符合正则表达式或定界,该内容则被判断为Yes,进行编辑(包括标准输出). sed中模式空间和保持空间中的内容会进行会换,这种会换会使文件内容进行多次的筛选编辑,完成复杂的任务.   一般情况下,sed

Linux中find命令-path -prune用法详解

摘自:http://www.cnblogs.com/hopeworld/archive/2011/04/08/2009252.html 在Windows中可以在某些路径中查找文件,也可以设定不在某些路径中查找文件,下面用Linux中的find的命令结合其-path -prune参数来看看在Linux中怎么实现此功能. 假如在当前目录下查找文件,且当前目录下有很多文件及目录(多层目录),包括dir0.dir1和dir2 ...等目录及dir00.dir01...dir10.dir11...等子目录

linux中touch命令的常见用法

linux下touch命令常用作改变文件或目录时间 语 法:touch [-acfm][-d <日期时间>][-r <参考文件或目录>][-t <日期时间>][--help] [--version][文件或目录...] 或 touch [-acfm][--help][--version][日期时间][文件或目录...] 简单的说就是可以把没有的文件给创建了,若一个文件已经存在又一次使用touch命令 则可以把时间修改为当前的时间,还可以任意的按照格式修改文件的时间为任意

linux中sed命令批量修改

sed命令下批量替换文件内容  格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名 -i 表示inplace edit,就地修改文件 -r 表示搜索子目录 -l 表示输出匹配的文件名s表示替换,d表示删除 示例:sed -i "s/shan/hua/g"  lishan.txt 把当前目录下lishan.txt里的shan都替换为hua sed的其他用法如下: 1.删除行首空格   sed 's/^[ ]*//g' f

sqlplus 中spool命令的简单用法

spool基本格式: spool 路径+文件名 select col1||','||col2||','||col3||','||col4||'..' from tablename; spool off spool常用的设置: set colsep' '; //域输出分隔符 set echo off; //显示start启动的脚本中的每个sql命令,缺省为on set feedback off; //回显本次sql命令处理的记录条数,缺省为on set heading off; //输出域标题,缺