文本处理工具sed

处理文本的工具sed

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

sed

用法:
    sed [option]... 'script' inputfile...
    
常用选项:
    -n :不输出模式空间内容的自动打印
    -e:  多点编辑
        
        [root@localhost ~]# sed -e '2,10d' -e '/rpc/,/rooter/d' f1
        root:x:0:0:root:/root:/bin/bash
        games:x:12:100:games:/usr/games:/sbin/nologin
        ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
        nobody:x:99:99:Nobody:/:/sbin/nologin
        avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
        systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
        systemd-network:x:998:996:systemd Network Management:/:/sbin/nologin
        dbus:x:81:81:System message bus:/:/sbin/nologin
        polkitd:x:997:995:User for polkitd:/:/sbin/nologin
        abrt:x:173:173::/etc/abrt:/sbin/nologin
        colord:x:996:994:User for colord:/var/lib/colord:/sbin/nologin        
        libstoragemgmt:x:995:992:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin        
        setroubleshoot:x:994:991::/var/lib/setroubleshoot:/sbin/nologin

    -f / PATH/TO/SCRIPT_FILE :  从指定文件中读取编辑脚本
        
        [root@localhost ~]# cat f2
        {lasfhakshfkasdlajsflda;fjlaksdfjlkas}if
        asdfasljfdalsjdfalkjfdlajf
        skdjafksafhakhsfakhfahflahfasfjk
        skdjafksafhakhsfakhfahflahfasfjk
        asdkfalksdfjal;sdjfklasdf
        skdjafksafhakhsfakhfahflahfasfjk
        
        [root@localhost ~]# sed -nf f1 f2
        asdfasljfdalsjdfalkjfdlajf

    -r:  支持使用扩展正则表达式
        
        [root@localhost ~]# echo "/etc/functions" | sed -r 's@/.*/([^/]+/?$)@\1@'
        functions
    -i:  原处编辑
        -i.bak
        在对file操作之前先对file进行备份,备份的文件名是file.bak
    
script:脚本

    地址+命令
    
    地址定界:
        (1)  不给地址:对全文进行处理
        (2)  单地址:        #:  指定的行
        /pattern/ :被此处模式所能够匹配到的每一行
            [root@localhost ~]# cat /etc/fstab | sed -n '/^U/p'
            UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
            UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
            UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
            UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0

        (3)  地址范围:        #,#
            [root@localhost ~]# sed -n '9,12p' /etc/fstab 
            UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
            UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
            UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
            UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0

        #,+#
            [root@localhost ~]# sed -n '3,+4p' /etc/fstab 
            # /etc/fstab
            # Created by anaconda on Mon Jul 25 12:04:17 2016
            #
            # Accessible filesystems, by reference, are maintained under '/dev/disk'
            # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

        /pat1/,/pat2/
            [root@localhost ~]# sed -n '/^root\b/,/^s/p' /etc/passwd
            root:x:0:0:root:/root:/bin/bash
            bin:x:1:1:bin:/bin:/sbin/nologin
            daemon:x:2:2:daemon:/sbin:/sbin/nologin
            adm:x:3:4:adm:/var/adm:/sbin/nologin
            lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
            sync:x:5:0:sync:/sbin:/bin/sync

        #,/pat1/
            [root@localhost ~]# sed -n '1,/^s/p' /etc/passwd
            root:x:0:0:root:/root:/bin/bash
            bin:x:1:1:bin:/bin:/sbin/nologin
            daemon:x:2:2:daemon:/sbin:/sbin/nologin
            adm:x:3:4:adm:/var/adm:/sbin/nologin
            lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
            sync:x:5:0:sync:/sbin:/bin/sync

        (4) ~ :步进        
            1~2  奇数行        
            2~2  偶数行
编辑命令:    
    d:  删除模式空间匹配的行
        
        [root@localhost ~]# cat f1 
         1	
         2	#
         3	# /etc/fstab
         4	# Created by anaconda on Mon Jul 25 12:04:17 2016
         5	#
         6	# Accessible filesystems, by reference, are maintained under '/dev/disk'
         7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
         8	#
         9	UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
        10	UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
        11	UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
        12	UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0
    [root@localhost ~]# sed '3d' f1
         1	
         2	#
         4	# Created by anaconda on Mon Jul 25 12:04:17 2016
         5	#
         6	# Accessible filesystems, by reference, are maintained under '/dev/disk'
         7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
         8	#
         9	UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
        10	UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
        11	UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
        12	UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0

    p:  显示模式空间中的内容
        
        [root@localhost ~]# sed -n '3p' f1
         3	# /etc/fstab

    a \text :在行后面追加文本;支持使用\n 实现多行追加
        
        [root@localhost ~]# sed  '3a\skdfjskdfjksdf' f1
         1	
         2	#
         3	# /etc/fstab
    skdfjskdfjksdf         4	# Created by anaconda on Mon Jul 25 12:04:17 2016
         5	#
         6	# Accessible filesystems, by reference, are maintained under '/dev/disk'
         7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
         8	#
         9	UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
        10	UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
        11	UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
        12	UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0

    i \text :在行前面插入文本;支持使用\n 实现多行插入
        
        [root@localhost ~]# sed  '3i\123456' f1
         1	
         2	#
    123456
         3	# /etc/fstab
         4	# Created by anaconda on Mon Jul 25 12:04:17 2016
         5	#
         6	# Accessible filesystems, by reference, are maintained under '/dev/disk'
         7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
         8	#
         9	UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
        10	UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
        11	UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
        12	UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0
    c \text :替换行为单行或多行文本
        
        [root@localhost ~]# sed  '3c\123456abcdefg' f1
         1	
         2	#
    123456abcdefg         
         4	# Created by anaconda on Mon Jul 25 12:04:17 2016
         5	#
         6	# Accessible filesystems, by reference, are maintained under '/dev/disk'
         7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
         8	#
         9	UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
        10	UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
        11	UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
        12	UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0

    w /path/to/somefile:  保存模式匹配的行至指定文件
    r /path/from/somefile :读取指定文件的文本至模式空
    间中匹配到的行后
    =:  为模式空间中的行打印行号
        [root@localhost ~]# sed = fstab 
        1
        
        2
        #
        3
        # /etc/fstab
        4
        # Created by anaconda on Mon Jul 25 12:04:17 2016
        5
        #
        6
        # Accessible filesystems, by reference, are maintained under '/dev/disk'
        7
        # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
        8
        #
        9
        UUID=f4406f6a-e495-45a0-a85e-3b059c0d3130 /                       xfs     defaults        0 0
        10
        UUID=7c25120e-2371-413d-b584-fdd695b96702 /boot                   xfs     defaults        0 0
        11
        UUID=19470291-724c-4f01-b6e1-7109ad22be1b /usr                    xfs     defaults        0 0
        12
        UUID=c3460309-9e8c-4037-8684-4c6bdcabbacb swap                    swap    defaults        0 0
        [root@localhost ~]# 

    !: 模式空间中匹配行取反处理
  • sed搜索替换    
       s/// :查找替换, 支持使用其它分隔符,s@@@ ,s###
      [root@localhost ~]# sed 's/root/god/' f3
      god
      god
      god root root
    
      替换标记:
      g:  行内全局替换
          [root@localhost ~]# sed 's/root/god/g' f3
          god
          god
          god god god
    
    
          
      p:  显示替换成功的行
      w  /PATH/TO/SOMEFILE :将替换成功的行保存至指定的文件中
  • sed高级编辑命令

高级编辑命令:    
h:  把模式空间中的内容覆盖至保持空间中    
H :把模式空间中的内容追加至保持空间中    
g:  从保持空间取出数据覆盖至模式空间    
G :从保持空间取出内容追加至模式空间
x:  把模式空间中的内容与保持空间中的内容进行互换    
n:  读取匹配到的行的下一行 覆盖 至模式空间    
N :追加匹配到的行的下一行至模式空间    
d:  删除模式空间中的行    
D :删除 当前模式空间开端至\n 的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed nl file 加行号

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

(0)
dxkbokedxkboke
上一篇 2016-08-10 10:27
下一篇 2016-08-10 10:27

相关推荐

  • Docker之~集群配置

    一、前言 Kubernetes 是Google开源的容器集群管理系统,基于Docker构建一个容器的调度服务,提供资源调度、均衡容灾、服务注册、动态扩缩容等功能套件,目前最新版本为0.6.2。 本文介绍如何基于Centos7.0构建Kubernetes平台,在正式介绍之前,大家有必要先理解Kubernetes几个核心概念及其承担的功能。以下为Kubernet…

    2017-03-16
  • 第三周小练习

    1. 列出当前系统上所有已经登陆的用户的用户名,注意,同一个用户登陆多次,则显示一次即可 who -u|grep -o "^[[:alnum:]]*\>"|uniq 2. 取出最后登陆到当前系统的用户信息 who|tail -n1 3. 取出当前系统上被用户当作其默认shell的最多的那个sh…

    Linux干货 2016-11-21
  • hadoop安全模式

    hadoop安全模式在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文…

    Linux干货 2015-04-13
  • 在Centos7上源码编译httpd

    在Centos7上源码编译httpd 安装源码包 首先在http://httpd.apache.org下载所需要的安装包 小编在这里下载的是httpd-2.4.27.tar apr-1.6.2.tar apr-util-1.6.0.tar 首先编译安装apr-1.6.2.tar.gz #1 tar -zxf apr-1.6.2.tar.gz #先解压安装包 …

    2017-08-21
  • M20 – 1- 第二周(2):硬链接与软链接的区别

    在讲硬链接与软链接的区别之前,我们首先了解inode,了解inode让我们更容易理解何为硬链接和软链接。 inode概念        何为inode,inode就是索引节点,而inode表中存放着文件的元数据,何为元数据,元数据就是文件名称、大小、时间戳、所有者、权限、inode等信息,而文件中的内容就是文件的数据,…

    Linux干货 2016-08-02
  • LVM 2 介绍以及怎么使用?

    一、 LVM是什么? LVM利用Linux内核的device-mapper来实现存储系统的虚拟化(系统分区独立于底层硬件)。 通过LVM,你可以实现存储空间的抽象化并在上面建立虚拟分区(virtual partitions),可以更简便地扩大和缩小分区,可以增删分区时无需担心某个硬盘上没有足够的连续空间, without getting caught up …

    Linux干货 2017-01-06