20.sed的简单使用

      sed是一种行编辑器,先将文本一行一行输出到缓冲区,做处理后输出到屏幕上。但是并不会对源码进行操作。

    sed "addresscommand" file1....

        -n 静默模式,模式空间不显示

        -i 直接修改源文件

        -e script -e script 多次使用

        -f /file 指定一个文件

        -r 使用扩展正则


    Address :

        1.startline,endline

        2.使用模式/pattern/

        3./pattern1/,/pattern2/ 从/pattern1/开始到pattern2结束的行

        4.linuNumber 指定行

            $表示最后一行

        5.startLine,+N 从指定的行向后n行,一共n+1行

    

    Command :

         d 删除符合条件的行,被匹配的不被显示

         p 打印符合条件的行

         a\string 直接在行的后面进行追加新的行,内容为string

         i \string  在指定的行前添加新的内容

         r filename 将指定的文件内容添加到指定的行处

         w filename 指定范围内的内容存入filename文件中

        s/pattern/string/ 查找并替换,默认匹配替换第一个,也可以使用s# # #或s@ @ @

            g    全局替换

            i     忽略大小写

    实例:

1.删除前两行

[root@localhost Test]# sed '1,2d' ~/Test/fstab
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
LABEL=SWAP-sda3         swap                    swap    defaults        0 0
2.打印符合条件的行

[root@localhost Test]# sed '/LABEL/p' ~/Test/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
LABEL=/boot             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
这时候被匹配的行会显示两次,所以要使用静默模式
[root@localhost Test]# sed -n '/LABEL/p' ~/Test/fstab
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
LABEL=SWAP-sda3         swap                    swap    defaults        0 0
3.在某行之后添加一行

[root@localhost Test]# sed  '1a\#hello world'  ~/Test/fstab
LABEL=/                 /                       ext3    defaults        1 1
#hello world
LABEL=/boot             /boot                   ext3    defaults        1 2
4.在某行之前添加一行
[root@localhost Test]# sed  '1i\#hello world'  ~/Test/fstab
#hello world
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
5.将其他文件内容插入

[root@localhost Test]# sed  '1,2r /etc/issue'  ~/Test/fstab
LABEL=/                 /                       ext3    defaults        1 1
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
Kernel \r on an \m

LABEL=/boot             /boot                   ext3    defaults        1 2
Red Hat Enterprise Linux Server release 5.8 (Tikanga)
Kernel \r on an \m

tmpfs                   /dev/shm                tmpfs   defaults        0 0
6.将内容写入其他文件

[root@localhost Test]# sed  '1,2w /etc/issue'  ~/Test/fstab
[root@localhost Test]# cat /etc/issue
LABEL=/                 /                       ext3    defaults        1 1
LABEL=/boot             /boot                   ext3    defaults        1 2
我在做这个的时候,直接把/etc/issue覆盖写了,会导致下次开机提示有问题,幸好我做了备份,复写回去就好。

7.查找并替换

[root@localhost Test]# sed 's/roo/ROO/' ./save 
ROOt/12233/dsfs
fdkjvkj/efhudsfhkj/ROOt
ROOt/cjdcjkzdvkj/dsjbj
    还要说明的,&作用是引用到整个串

    sed 's#l..e#&r#' liv    其实等同于 sed 's#(l..e)#\1r#' liv

[root@localhost Test]# sed -e 's#LABEL#&r#' -e 's/[[:space:]]/---/g' fstab 
LABELr=/---------------------------------------------------/---------------------------------------------------------------------ext3------------defaults------------------------1---1
    还可以使用脚本

    sed -f ./script -e 's/[[:space:]]/---/g' fstab

   

      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值