文本处理工具sed

处理文本的工具sed

    stream EDitor,行编辑器

    sed是一种流编辑器,他一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,成为“模式空间”(pattern space),接着用sed命令处理缓存区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,知道文本末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

    sed option… 'script' inputfile

        -n:不输出模式空间内容的自动打印

        -e:多点编辑

        -f /path/to/script_file:从指定文件中读取编辑脚本

        -r:支持使用扩展正则表达式

        -i:原处编辑

    script:

        ‘地址命令’

    地址定界:

        不给地址:对全文进行处理

        单地址:

            n:指定的行

            /pattern/:被此处模式所能够匹配到的每一行

        地址范围:

            n,m:n到m行

            n,+m:n到n+m行

            /pat1/,/pat2/

            n,/pat1/

        ~:步进

            1~2 奇数行

            2~2 偶数行

    编辑命令:

        d:删除模式空间匹配的行

        p:显示模式空间中的内容

        a \text:在行后面追加文本,支持使用\n实现多行追加

        i \text:在行前面插入文本,支持使用\n实现多行插入

        c \text:替换行为单行或多行文本

        w /path/to/somefile:保存模式匹配的行至指定文件

        r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后

        =:为模式空间中的行打印行号

        !:模式空间中匹配行取反处理

[root@localhost wang]# cat file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     3	    inet 127.0.0.1/8 scope host lo
     4	       valid_lft forever preferred_lft forever
     5	    inet6 ::1/128 scope host 
     6	       valid_lft forever preferred_lft forever
     7	2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     8	    link/ether 00:0c:29:54:19:1f brd ff:ff:ff:ff:ff:ff
     9	    inet 192.168.1.114/24 brd 192.168.1.255 scope global dynamic eno16777736
    10	       valid_lft 6320sec preferred_lft 6320sec
    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
    12	       valid_lft forever preferred_lft forever
[root@localhost wang]# sed '2p' file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     3	    inet 127.0.0.1/8 scope host lo
     4	       valid_lft forever preferred_lft forever
     5	    inet6 ::1/128 scope host 
     6	       valid_lft forever preferred_lft forever
     7	2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     8	    link/ether 00:0c:29:54:19:1f brd ff:ff:ff:ff:ff:ff
     9	    inet 192.168.1.114/24 brd 192.168.1.255 scope global dynamic eno16777736
    10	       valid_lft 6320sec preferred_lft 6320sec
    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
    12	       valid_lft forever preferred_lft forever
[root@localhost wang]# sed -n '2p' file3
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
[root@localhost wang]# sed -n '1,4p' file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     3	    inet 127.0.0.1/8 scope host lo
     4	       valid_lft forever preferred_lft forever
[root@localhost wang]# sed -n '/inet/p' file3
     3	    inet 127.0.0.1/8 scope host lo
     5	    inet6 ::1/128 scope host 
     9	    inet 192.168.1.114/24 brd 192.168.1.255 scope global dynamic eno16777736
    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
[root@localhost wang]# sed -n '1,/inet/p' file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     3	    inet 127.0.0.1/8 scope host lo
     注:默认到/pattern/第一个
[root@localhost wang]# sed '/inet/a\gebilaowang' file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
     3	    inet 127.0.0.1/8 scope host lo
gebilaowang
     4	       valid_lft forever preferred_lft forever
     5	    inet6 ::1/128 scope host 
gebilaowang
     6	       valid_lft forever preferred_lft forever
     7	2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     8	    link/ether 00:0c:29:54:19:1f brd ff:ff:ff:ff:ff:ff
     9	    inet 192.168.1.114/24 brd 192.168.1.255 scope global dynamic eno16777736
gebilaowang
    10	       valid_lft 6320sec preferred_lft 6320sec
    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
gebilaowang
    12	       valid_lft forever preferred_lft forever
 注:在/pattern/行后添加gebilaowang
 [root@localhost wang]# sed '/inet/i\gebilaowang' file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
gebilaowang
     3	    inet 127.0.0.1/8 scope host lo
     4	       valid_lft forever preferred_lft forever
gebilaowang
     5	    inet6 ::1/128 scope host 
     6	       valid_lft forever preferred_lft forever
     7	2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     8	    link/ether 00:0c:29:54:19:1f brd ff:ff:ff:ff:ff:ff
gebilaowang
     9	    inet 192.168.1.114/24 brd 192.168.1.255 scope global dynamic eno16777736
    10	       valid_lft 6320sec preferred_lft 6320sec
gebilaowang
    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
    12	       valid_lft forever preferred_lft forever
    注:在/pattern/行前添加gebilaowang
[root@localhost wang]# sed '/inet/c\gebilaowang' file3
     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     2	    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
gebilaowang
     4	       valid_lft forever preferred_lft forever
gebilaowang
     6	       valid_lft forever preferred_lft forever
     7	2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     8	    link/ether 00:0c:29:54:19:1f brd ff:ff:ff:ff:ff:ff
gebilaowang
    10	       valid_lft 6320sec preferred_lft 6320sec
gebilaowang
    12	       valid_lft forever preferred_lft forever
    注:gebilaowang代替了/pattern/行的内容
    [root@localhost wang]# sed '1,10d' file3
    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
    12	       valid_lft forever preferred_lft forever
[root@localhost wang]# nl file3 | sed '2,5d'
     1	     1	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
     6	     6	       valid_lft forever preferred_lft forever
     7	     7	2: eno16777736: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
     8	     8	    link/ether 00:0c:29:54:19:1f brd ff:ff:ff:ff:ff:ff
     9	     9	    inet 192.168.1.114/24 brd 192.168.1.255 scope global dynamic eno16777736
    10	    10	       valid_lft 4557sec preferred_lft 4557sec
    11	    11	    inet6 fe80::20c:29ff:fe54:191f/64 scope link 
    12	    12	       valid_lft forever preferred_lft forever

[root@localhost wang]# cat -n file2
     1	123123
     2	
     3	123412
     4	4124
     5	31
     6	
     7	
     8	12413
     9	4
[root@localhost wang]# sed -n '/^$/=' file2
2
6
7
注:显示空行行号,空格非空行。
[root@localhost wang]# cat -n file2
     1	
     2	a
     3	
     4	adas
     5	
     6	qweqwrq
[root@localhost wang]# sed '/^$/d' file2
a
adas
qweqwrq
注:删除空行,空格不是空行

    s///:查找替换,支持使用其他分隔符,s@@@,s###

        替换标记:

            g:行内全局替换

            p:显示替换成功的行

            w /path/to/somefile:将替换成功的行保存至文件中

    高级编辑命令

        h:把模式空间中的内容覆盖至保持空间中

        H:把模式空间中的内容追加至保持空间中

        g:从保持空间取出数据覆盖至模式空间

        G:从保持空间取出内容追加只模式空间

        x:把模式空间中的内容与保持空间中的内容进行互换

        n:读取匹配到的行的下一行覆盖至模式空间

        N:追加匹配到的行的下一行只模式空间

        d:删除模式空间中的行

        D:删除当前模式空间开端至\n的内容(不在传至标准输出)。放弃之后的命令,但是对剩余模式空间重新执行sed

            (C|c)at:Cat或cat

[root@localhost wang]# cat file3
1
2
3
4
5
6
7
8
9
10
[root@localhost wang]# sed -n "n;p" file3
2
4
6
8
10
[root@localhost wang]# sed '1!G;h;$!d' file3
10
9
8
7
6
5
4
3
2
1
[root@localhost wang]# sed '$!N;$!D' file3
9
10
[root@localhost wang]# sed '$!d' file3
10
[root@localhost wang]# sed 'G' file3
1

2

3

4

5

6

7

8

9

10

[root@localhost wang]# sed 'g' file3










[root@localhost wang]# sed '/^$/d;G' file3
1

2

3

4

5

6

7

8

9

10

[root@localhost wang]# sed 'n;d' file3
1
3
5
7
9
[root@localhost wang]# sed -n '1!G;h;$p' file3
10
9
8
7
6
5
4
3
2
1

原创文章,作者:DYW,如若转载,请注明出处:http://www.178linux.com/32769

(0)
上一篇 2016-08-10 15:33
下一篇 2016-08-10 16:31

相关推荐

  • Linux中Vim编辑器的使用

    Linux中Vim编辑器的使用 Vim功能介绍 vim是一款功能丰富而强大的文本编辑器,支持语法高亮,支持多窗口编辑,是vi文本编辑器的增强版。如果在CentOS7.2中如果是选择最小化安装,其默认是没有安装vim rpm包的,需要自行安装,可以使用yum工具进行在线安装。  vim至今已经走过了25个春秋,现在8.0版的已经发布了。  …

    Linux干货 2016-12-02
  • 0804正则表达式作业

    用正则表达式表示IP地址         首先来分析一下,制IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(1…

    Linux干货 2016-08-10
  • Linux创建CA和申请认证

    Linux创建CA和申请认证 背景: 在学习Linux运维中,学习到了CA的创建和申请认证,为了加深对CA的理解,这里做一个创建CA和申请认证的实验并记录下来供以后回顾。 介绍: 什么是CA认证? 电子商务认证授权机构(CA, Certificate Authority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任…

    2017-09-09
  • MAN手册各章节功能及快捷键

    前言: man是manual的简称,中文说法可以是手册。而man手册分为不同的各个章节,每个章节保存这不通类型的手册。 各个章节功能:    Section 名称      说明 1 用户命令 可由任何人启动的 2 系统调用 即由内核提供的函数 3 例程   …

    Linux干货 2016-10-17
  • 第三周作业

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 2、取出最后登录到当前系统的用户的相关信息。 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存 至/tmp/maxusers.txt文件中。 5、取出当前主机…

    Linux干货 2016-11-21
  • Ubuntu之apt-get光盘源配置小结

    Ubuntu配置本地apt源的方法:    1. 命令自动配置:        mount    /dev/cdrom   /mnt/cdrom        apt-cdrom   ident   &nbsp…

    Linux干货 2016-03-09