文本处理工具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)
DYWDYW
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • Linux—文本处理(查看,统计,排序,抽取,合并,grep,基本正则表达式)

    Linux的文本管理有着众多的文本命令工具,这些工具基本可以满足不同的文本处理要求,很是灵活,掌握文本管理命令对系统的维护是必备基础技能。 1.文本查看命令:     (1)cat        语法:        cat [OPTION]… […

    Linux干货 2016-08-07
  • Linux上文件管理类命令实例讲解

    下面介绍三个文件cp, mv, rm管理命令: cp命令:copy,复制命令 命令格式: cp 源文件 目标文件 复制又分为单源复制和多源复制两种情况: 单源复制 如果目标文件不存在,创建此文件,并复制数据流到此文件; [root@localhost tmp]# cp yum.log ok [root@localhost tmp]# ls -l total …

    Linux干货 2018-02-28
  • magedu_20160808

    行编辑器sed与vim文本处理器     一.行编辑器sed的使用介绍     sed英文全称stream editor,行编辑器。其工作模式为将文件中内容按行转移至sed模拟空间中,根据地址判定此行是否匹配,如果匹配,根据命令输出并打印,如果不匹配,按照默认打印到屏幕上。它的作用是根据选项和地址界定‘scr…

    Linux干货 2016-08-10
  • Linux初识

    一 .计算机的关键部位 cpu(运算器 控制器):正给计算机的中枢神经,对程序控制信息的处理和 对数据的运算 存储器:存储程序数据和各种信息指令 Input:起到将各个外部信息传递给计算机的作用 output:将计算机内部的各个信号数据及计算结果输出 二 .一些主流Linux发行版简介 linux发行版:linux只是一个操作系统,搭配其它软件发行的系统就是…

    Linux干货 2016-10-30
  • bash中的变量

        对任何一门编程语言来说,最基础的部分就是变量。那什么事变量呢?变量就是把一个已知的可以变动的值,赋给一个固定名字的,用固定的名字代表这个可变动的值。在bash中也不例外,跟大多数编程语言一样,它也有一些自己的语法和规则 bash变量:     1.规则设置:变量和变量的值中间用=连接,=的两…

    Linux干货 2016-08-15
  • LVM2详解

    1、什么是lvm LVM是逻辑卷管理(Logical Volume Manager)的简称,它是建立在物理存储设备之上的一个抽象层,允许你生成逻辑存储卷,与直接使用物理存储在管理上相比,提供了更好灵活性。LVM将存储虚拟化,使用逻辑卷,你不会受限于物理磁盘的大小,另外,与硬件相关的存储设置被其隐藏,你可以不用停止应用或卸载文件系统来调整卷大小或数据迁移.这样…

    Linux干货 2017-01-03