Linux文本处理三剑客之一sed

这周我们学习了文本处理工具三剑客之一的sed,对于之前学的grep同样的重要,也同样是一个难点。sed是针对一个文件或者多个文件一行一行处理的,它处理的时候,把当前处理的行存储在模式空间,处理完成后,把缓冲区内容输出到屏幕上,接着处理下一行。直到文件末尾。原文件并没有经过更改。

1、sed一些常用的选项

    -n 不输出模式空间的内容到屏幕上,相当于静默模式

    -e 多点编辑模式,可以对一行内容进行多点处理

    -f 把script写到文件当中,在执行sed时-f指定文件路径,如果是多个script,换行写

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

    -i.bak 编写的文件写入文件之前备份原文件(-i是直接对原文件进行修改)

2、sed 中的script,地址定界

    不给地址:对全文处理

    单地址:#指定的行

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

    地址范围:#,#    

                    #,+#   

                    /pat1/,/pat2/   

                    #,/pat1/ 

    跳行: sed -n ‘1~2p’   只打印奇数行

               sed -n ‘2~2p’   只打印偶数行

               sed -n ‘1~3p’   从第1行开始,每隔3行显示一次

    Linux文本处理三剑客之一sed

3、sed编辑命令

    d:删除模式空间匹配的行,并立即启用下一轮循环

    p: 打印当前模式空间内容,追加到默认输出之后

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

    i\text:在行前面插入文本

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

    w 新文件路径:保存模式匹配的行至指定文件

    r 文件路径:读取指定文件的文本至模式空间中匹配到的行后

    Linux文本处理三剑客之一sed

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

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

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

    g:行内全局替换

4、sed高级编辑命令

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

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

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

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

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

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

    N:读取匹配到的行的下一行追加至模式空间

    d: 删除模式空间中的行

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

5、练习

    (1)删除centos7系统/etc/grub2.cfg文件中所有以空白开头 的行行首的空白字符

    Linux文本处理三剑客之一sed

    红色标记为:将以空白字符开头并且重复一次以上的内容删除

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

    Linux文本处理三剑客之一sed

    红色标记为:以#开头后面跟空白字符并且重复一次以上的内容删除

    (3)在centos6系统/root/install.log每一行行首增加#号
    Linux文本处理三剑客之一sed

    内容太长所以我就只截取了前十行

    红色标记为:开头的内容替换为#号

    (4)在/etc/fstab文件中不以#开头的行的行首增加#号
    Linux文本处理三剑客之一sed

    红色标记为:以非#号开头的前面加一个#号,如果不加&则不是#开头的第一个字母也会被覆盖

    (5)处理/etc/fstab路径,使用sed命令取出其目录名和基名
    Linux文本处理三剑客之一sed

    第一个括号里面代表的是目录名,第二个括号里面是基名,这里引用一个后向引用

    (6)利用sed 取出ifconfig命令中本机的IPv4地址
    Linux文本处理三剑客之一sed

    红色标记的为:取出eth0里面的第二行

    蓝色标记的为:以addr:之前的内容删除

    黄色标记的为:以  Bcast后面的内容全部删除

    (7)统计centos安装光盘中Package目录下的所有rpm文件的 以.分隔倒数第二个字段的重复次数
    Linux文本处理三剑客之一sed

    黄色标记的为:因为Packages里面有一行TRANS.TBL所以我们要把这行删除

    红色标记的为:里面的小括号是两个.中间的内容

                          里面的大括号是全部内容。

                          这里我们引用一个后向引用,只要.rpm前面的内容不包括.的

    (8)统计/etc/init.d/functions文件中每个单词的出现次数, 并排序(用grep和sed两种方法分别实现)
    用grep:

    Linux文本处理三剑客之一sed

    红色标记的为:只截取以大小写字母重复至少一次的内容,锚定了一下,中间就不会有别的任何字符

    用sed:

    Linux文本处理三剑客之一sed 

    红色标记的为:任何非英文的重复一次以上的换行

    黄色标记的为:删除空行

    (9)将文本文件的n和n+1行合并为一行,n为奇数行
    Linux文本处理三剑客之一sed

    红色标记的为:读第一行的时候直接把第二行也追加到模式空间里面的第一行下面,然后在模式空间里面把第一行和第二行的换行符删掉,完成后输出出来。接下来读取第三行的时候同第一行一样,直接把第四行追加到模式空间第三行的下面

    还有一种方法如下:  

    cat -n /etc/passwd |sed -n ‘1~2p’  > /app/file1                将/etc/passwd里面的奇数行取出来放到file1文件中

    cat -n /etc/passwd |sed -n ‘2~2p’  > /app/file2                将/etc/passwd里面的偶数行取出来放到file2文件中

    paste -d “” file1 file2                                                     把file1  file2文件合并为一个文件显示出来

    Linux文本处理三剑客之一sed

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

(0)
In summerIn summer
上一篇 2017-08-26 15:52
下一篇 2017-08-26 16:23

相关推荐

  • iptables

    iptables简介 netfilter/iptables(简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。 iptables基础 规则(rules)其实就是网络管理员预定义的条件,规则一般的定义为“…

    2017-05-02
  • LAMP运行环境搭建及部署php程序软件

    前言     Linux+Apache+MySQL+PHP是大多数web服务器的运行环境,能熟练配置此运行环境是每个运维的必备基本技能,本文以安装MySQL管理工具PHPmyadmin以及博客软件wordpress为例,演示编译安装LAMP运行环境的过程。 一、实验拓扑图 二、安装步骤 2.1 编译安装Apache h…

    2015-11-26
  • 分布式系统的事务处理

    当我们在生产线上用一台服务器来提供数据服务的时候,我会遇到如下的两个问题: 1)一台服务器的性能不足以提供足够的能力服务于所有的网络请求。 2)我们总是害怕我们的这台服务器停机,造成服务不可用或是数据丢失。 于是我们不得不对我们的服务器进行扩展,加入更多的机器来分担性能上的问题,以及来解决单点故障问题。 通常,我们会通过两种手段来扩展我们的数据服务: 1)数…

    Linux干货 2016-08-15
  • FHS文件系统以及各目录功能

    FHS:Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理,规范在根目录(/)下面各个主要目录应该放什么样的文件。 …

    Linux干货 2016-10-17
  • grep文本查找和正则表达式

    一、grep grep: (Global search REgular expression and Print outthe line)全局查找正则表达式并且打印结果行。不会对输入的文本进行修改。 Unix的grep家族包括grep、egrep和fgrep,egrep是grep的扩展,支持更多的正则元字符; fgrep就是fixed grep或f…

    Linux干货 2016-08-07
  • Linux的安全控制访问模块之SElinux

    SElinux   1、Selinux介绍:Linux的一个强制访问控制安全模块,2000年以GNU GPL发布,Linux内核2.6版本集成在内核中。 DAC:自由访问控制,进程是无束缚的。 MAC:强制访问控制,策略的规则决定控制的严格程度(策略被用来定义被限制的进程能够使用那些资源[文件和端口]);进程的可以被限制的;默认情况下,没有允许的行…

    Linux干货 2016-09-19