Linux中sed的常用方法

sed

1、介绍

         在Linux中,sed命令是利用脚本处理文本文件。

         sed可依照脚本指令来处理,编辑文本文件。

         sed主要用来自动编辑一个或多个文件,简化对文件的反复擦欧洲哦,编写转换程序等。

2、语法

 sed     [-hnV][-e<script>][-f<script文件>][文本文件]

3、参数说明

    ●-e<script>或--expression=<script> 以选中指定的script来处理输入的文本文件。

    ●-f<script文件>或--file=<script文件> 以轩选项中指定的script文件来处理输入的文本文件。

    ●-n或—quite或—silent仅显示script处理后的结果。

    ●-V或—version显示版本信息。

4、动作说明

    ●a : 新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)。

    ●c : 取代,c后面可以接字符串,这些字符串可以取代n1,n2之间的行。

    ●d : 删除,因为是删除,所以d后面通常不接任何参数。

    ●i :插入,i后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)。

    ●p : 打印,亦即将某个选择的数据印出。通常p会与参数sed –n一起运行。

    ●s : 取代,可以直接进行取代的工作,通常这个s的动作可以搭配正规表示法。

5、实例

<1>、在testfile文件的第四行后添加一行,并将结果输出到标准输出,在命令行提示符下输出命令:

sed –e 4a\newline testfile

●以行为单位的新增/删除

<1>、将/root/testfile的内容列出并且打印行号,同时,请将第2~5行删除!

nl /root/testfile  | sed '2,5d'

    sed的动作为'2,5d',里面那个d就是删除!因为2—5行给他删除了,所以显示的数据就没有2—5行,注意:这里原本因该是要下达sed –e才对,没有-e也是可以的。sed后面接的动作,一定要加单引号扩住!

<2>、删除第3行到最后一行

nl /root/testfile | sed '3,$d'

<3>、在第二行前加入hello redhat

nl /root/testfile | sed '2i hello redhat'

<4>、如果是要增加两行以上,在第二行后面加入两行字

nl /root/testfile  | sed '2a hello \

> redhat'

         每一行之间都必须要以反斜杠 \ 来进行新的添加,所以,上面的例子中,我们可以发现在第一行的最后面就有 \ 的存在。

●以行为单位的替换与显示

<1>、将第2到5行的内容取代为No 2-5 hello呢?

nl /root/testfile  | sed '2,5c No 2-5 hello'

<2>、仅列出/root/testfile文件内容的第5—7行

nl /root/testfile | sed -n '5,7p'

         可以透过这个sed的以行为单位的显示功能,就能够阿静某一个文件内放入某些行号选择出来显示。

●数据的搜寻并显示

<1>、搜索/etc/passwd有关root关键字的行

nl /etc/passwd | sed '/root/p'

如果root找到,除了输出所有行,还会输出匹配行。

使用-Nde 时候只将打印包含模板的行。

nl /etc/passwd | sed -n ' /root/p'

●数据的搜寻并删除

删除/etc/passwd所有包含root的行,其进行输出

nl /etc/passwd | sed '/root/d'

●数据的搜寻并执行命令

    搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p;q}'

         注:最后的q是退出。

●数据的搜寻并替换

    除了正行的处理模式之外,sed还可以用行为单位进行部分数据的搜寻并取代。基本上sed的搜寻与替代的与vi相当的类似!

    sed 's/要被取代的字符串/新的字符串/g'

 先观察原始信息,利用/sbin/ifcong查询IP

    /sbin/ifconfig ens33

    本机的ip是172.24.8.133

    将IP前面的部分予以删除

    /sbin/ifconfig ens33  | grep 'inet ' | sed 's/^.*address://g'

●多点编辑

    一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

    nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'

         -e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

●直接修改文件内容(动作危险)

         sed可以直接修改文件的内容,不必使用管道命令或数据流重定向!不过,由于这个动作会直接修改源使的文件,所以,千万不能随便拿系统配置来测试!我们继续使用/root/testfile文件来测试。

         查看/root/testfile文件内容

         利用sed将/root/testfile内每一行结尾的 . 替换成 !

  sed -i 's/\.$/\!/g' testfile

         利用sed直接在/root/testfile文件中最后一行加入#hello redhat

  sed -i '$a #hello redhat' /root/testfile

         因为$代表的是最后一行,而a的动作是新增内容,因此该文件最后新增了#hello redhat

         sed的- I 选项可以直接修改文件内容,例如有一个超过1000行的数据,你想要在249行添加内容,用vim可能有点繁琐,这时用sed就简单多了。

 

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值