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

相关推荐

  • 网络管理之配置文件及一些命令的应用

    IP配置、信息、相关命令    IP地址     它们可唯一标识 IP 网络中的每台设备     每台主机(计算机、网络设备、外围设备)必须具有唯一的地址     IP 地址由两部分组成:   &nb…

    Linux干货 2016-09-22
  • CentOS系统启动流程–上

    centos6启动流程 1.加载BIOS的硬件信息,获取第一个启动设备。 2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备。 4.核型执行init程序并获取运行信息。 5.Init执行/etc/rc.d/rc.sysinit文件。 6.启动核心的外挂模块(/etc/m…

    Linux干货 2016-09-13
  • shell编程之条件判断和find查询

    使用read 来把输入值分配给一个或多个shell 变量: -p 指定要显示的提示 -t TIMEOUT read 从标准输入中读取值,给每个单词分配一个变量 所有剩余单词都被分配给最后一个变量 read -p “Enter a filename: “ FILE   条件选择if语句  多分支 if  CONDITION1 ; …

    Linux干货 2016-08-18
  • vsftpd基于mysql实现用户认证

    一、前言   ftp介绍:     ftp全程是File Transfer Protocol(文件传输协议),方便于实文件交换;但是在文件传输以及账号密码发送时都是以明文传输,因此是一个明文协议 ftp是C/S方式:   常见的客户端有:     GUI方式:browers、FileZilla-cl…

    Linux干货 2015-06-15
  • MAN 手册各章节功能介绍及快捷键键位整理

    MAN 手册各章节功能介绍及快捷键键位整理 前言  Man 手册页(Manua pages ,缩写man page) 是在linux操作系统在线软件文档的一种普遍形式。内容包括计算机程序库和系统调用等命令的帮助手册。  手册页是用troff排版软件包排版的,是一组man宏。当时手册页系统带来的联机文档可用性被认为是一项伟大的进步。时至今日…

    Linux干货 2016-10-17
  • 互联网安全之iptables/netfilter入门到进阶

    随着互联网技术的方兴未艾,各种网络应用层出不穷,网络攻击、黑客入侵也成了网民畅游互联网的心头大患,互联网安全也愈加受到了人们的重视。网络防火墙,作为一种简单高效的互联网防御手段,逐渐成为了网民畅游网络世界的保护伞。下面笔者介绍下Linux系统的守卫者——iptables/netfilter。  一 兄弟齐心,其利断金  iptables/netfilter就…

    Linux干货 2017-05-06