Linux文本处理三剑客之sed

处理文本工具sed

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

用法:

   sed[option]... 'script' inputfile...

常用选项:

   -n:不输出模式空间内容的自动打印
   -e:多点编辑
   -f /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本
   -r:支持使用扩展正则表达式
   -i:原处编辑

地址命令:

地址定界:

   (1)不给地址:对全文进行处理
   (2)单地址:
           #:指定的行
           /pattern/:被此模式所能匹配到的每一行
   (3)地址范围:
           #,#
           #,+#
           /pat1/,/pat2/
           #,/pat1/
   (4)~:步进
           1~2 奇数行
           2~2 偶数行

编辑命令:

    d:删除模式空间匹配的行
    p:显示模式空间中的内容
    a \text:在行后面追加文本;指出使用\n实现多行追加
    i \text:在行后前面追加文本;指出使用\n实现多行插入
    c \text:替换行为单行或多行文本
    w /path/to/somefile:保存模式空间的行至指定文件
    r /path/to/somefile:读取指定文件的文本至模式空间中匹配到的行后
    =:为模式空间中的行打印行号
    !:模式空间中匹配行取反处理

替换命令:

    s///:查找替换,支持使用其他分隔符,s@@@,s###
        sed 's/要被替换的字符串/新的字符串'
    替换标记:
        g:行内全部替换
        p:显示替换成功的行
        w /PATH/TO/DOMEFILE:将替换成功的行保存至文件中

sed示例:

     使用-n的时候将只打印包含模板的行

    [root@centos7 ~]# sed -n '2p' /etc/passwd
    bin:x:1:1:bin:/bin:/sbin/nologin

     把/etc/passwd下1到4行取出

    [root@centos7 ~]# sed -n '2,4p' /etc/passwd
    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

      先取空白行再取空白行的行号,-e是多点编辑

    [root@centos7 ~]# sed -n -e '/^$/p' -e '/^$/=' /etc/rc.d/init.d/functions 

    6

    8

    11

    15

    在匹配到root字符行的下方添加superman

    [root@centos7 ~]# sed '/root/a\superman' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    superman
    bin:x:1:1:bin:/bin:/sbin/nologin

    匹配到的root字符的行被superman替代   

    [root@centos7 ~]# sed '/root/c\superman' /etc/passwd
    superman
    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

    把/etc/passwd中的2到5行删除

    [root@centos7 ~]# nl /etc/passwd | sed '2,5d'
     1	root:x:0:0:root:/root:/bin/bash
     6	sync:x:5:0:sync:/sbin:/bin/sync
     7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8	halt:x:7:0:halt:/sbin:/sbin/halt
     9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    “&”引用前面查找时查找到的整个内容

    [root@centos7 ~]# sed -n 's/root/&superman/p' /etc/passwd
    rootsuperman:x:0:0:root:/root:/bin/bash
    [root@centos7 ~]# sed -n 's/root/superman&/p' /etc/passwd
    supermanroot:x:0:0:root:/root:/bin/bash

    -i可以直接修改文件的内容(危险操作)

    [root@centos7 ~]# nl /etc/passwd > f1
    [root@centos7 ~]# sed -i '2d' f1
    [root@centos7 ~]# cat f1
     1root:x:0:0:root:/root:/bin/bash
     3daemon:x:2:2:daemon:/sbin:/sbin/nologin

删除f1第二行之前先做个备份命名为f1.bak

    [root@centos7 ~]# sed -i.bak '2d' f1

sed练习:

1、删除/etc/grub2.conf文件中所有以空白开头的行行首的空白字符

    cat /etc/grub2.cfg| sed 's@^[[:space:]]\+@@g'

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

    cat /etc/fstab | sed 's@^#[[:space:]]\+@@g'

3、在/root/install.log每一行行首增加#号

    sed 's@^@#@g' /root/install.log

4、在/etc/fstab文件中不以#开头的行的行首增加#号

    sed 's@^[^#]@#&@' /etc/fstab

5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

    echo /etc/fstab/abc/ |sed -r 's@(.*/)([^/]+/?$)@\1@'
    echo /etc/fstab/abc/ |sed -r 's@(.*/)([^/]+/?$)@\2@'

6、利用sed 取出ifconfig命令中本机的IPv4地址

    ifconfig | sed -n '2p' | sed -r 's@.*addr:(.*) B.*@\1@'

7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

    ls *.rpm |sed -r 's@.*\.(.*)\.rpm$@\1@' | sort|uniq -c

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

(0)
xiaoqingxiaoqing
上一篇 2016-08-15
下一篇 2016-08-15

相关推荐

  • 浅谈Openssl与私有CA搭建

        随着网络技术的发展、internet的全球化,信息共享程度被进一步提高,各种基于互联网的应用如电子政务、电子商务日益增多并愈加被人们工作和生活依赖。但是,由于互联网的开放性和通用性,网络上的信息是对所有人公开的,这就使网络上的数据传输过程中存在被窃听、篡改等安全隐患,并极有可能给用户带来不可估量的损失。为此,各种保证数据在互联网上…

    Linux干货 2015-06-04
  • DNS

    配置缓存服务器: #vim /etc/named.conf Options { Listen-on port 53 { 127.0.0.1;172.16.0.68;}; //listen-on-v6 port 53 {::1;}; ……. Allow-query {any;}; …… Dnssec-enable…

    2017-06-04
  • awk简介

    Awk介绍   报告生成器,格式化文本输出 gawk:模式扫描和处理语言 基本用法: Awk [option]  ‘program’ var=value file Awk [ option]  -F    programfile var =value file   F指明分隔符 Awk [option ]   ‘BEGIN’{ACTION…}  …

    Linux干货 2018-01-02
  • 用户组和权限管理

    一、3A认证     Authentication:认证     Autherization:授权     Accoutiong|Audition:审计 二、用户user      linu…

    Linux干货 2016-08-04
  • mysql主从复制及zabbix监控从服务器

    Mysql备份: 备份系统的构建,要注意的要点: 第一:能容忍最多丢失多少数据; 第二:恢复数据需要在多长时间内完成; 第三:需要恢复哪些数据:备份时要考虑备份完整; (1)必须做还原测试,用于测试备份的可用性; (2)还原演练;不是一个人能够完成的; 备份类型: 完全备份:就是备份整个数据集,是从时间轴上划分的,完整数据集;; 部分备份:只备份数据子集; …

    Linux干货 2016-12-05
  • 做有高薪有逼格的运维工程师,不会Linux是没有前途的!

    作为互联网的幕后英雄,运维工程师长期隐匿在大众认知范围之外,关于运维的讨论仍旧是一片无人涉足的荒漠。在某知名行业研究调查结果中,非互联网从业者对于运维相关问题的回复有三个高频词汇是:不知道、没听过、网管。当调查人员告诉他们科幻电影中展示黑客高超技巧时的命令行界面正是大多数运维工程师每日工作环境时,他们发出极其一致的惊叹。 相对于普罗大众的一无所知,技术圈对运…

    2017-09-08