Linux上文本处理三剑客sed

Sed是一种在线编辑器,行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,该缓冲区称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出:然后紧接着去处理下一行,重复完成相同的操作,直至文件末尾;sed处理的整个过程中,对象文件中的内容并没有发生改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作过程。

Sed所具有的功能有:数据的替换,删除,新增等,这里的数据可以是一些关键字,也可以是一些特定的行。可谓sed的功能是非常丰富的,那我们就来具体了解下sed的用法。

sed 命令

简介:
sed - stream editor for filtering and transforming text
格式:
sed [OPTION]... {script-only-if-no-other-script} [input-file]...
选项:
-n:不输出模式空间内容的自动打印
-e: 多点编辑
-f:/PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r: 支持使用扩展正则表达式
-i: 原处编辑

script:('地址命令')
   地址定界:
       (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/from/somefile:读取指定文件的文本至模式空间中匹配到的行后
    =: 为模式空间中的行打印行号
    !:模式空间中匹配行取反处理
    s///:查找替换,支持使用其它分隔符,s@@@,s###
         替换标记:
             g: 行内全局替换
             p: 显示替换成功的行
             w /PATH/TO/SOMEFILE:将替换成功的行保存至文件中
示例:
sed‘2p’ /etc/passwd                    #显示文件"passwd"中的内容,并打印第二行,因此第二行多显示一次
sed –n ‘2p’ /etc/passwd                #仅显示第二行
sed –n ‘1,4p’ /etc/passwd              #仅显示第一到第四行
sed –n ‘/root/p’ /etc/passwd           #仅显示匹配到的字符串‘/root/’的行
sed –n ‘2,/root/p’ /etc/passwd=        #从第二行开始匹配字符串‘/root/’的行,并仅显示匹配到的行
sed -n ‘/^$/=’ file                    #仅显示空行行号并打印行号
sed –n –e ‘/^$/p’ –e ‘/^$/=’ file      #仅显示文件"file"中的空行,并打印行号
sed‘/root/a\superman’ /etc/passwd      #在匹配字符串‘/root/’的行后面追加内容"superman"
sed‘/root/i\superman’ /etc/passwd      #在匹配字符串‘/root/’的行前面追加内容"superman"
sed‘/root/c\superman’ /etc/passwd      #将匹配字符串‘/root/’替换成superman
sed‘/^$/d’ file                        #删除文件"file"中的空行
sed‘1,10d’ file                        #删除文件"file"中的1到10行
nl /etc/passwd| sed‘2,5d’              #显示文件"passwd"中的第2到第5行;(nl相当于cat -b)
nl /etc/passwd| sed‘2a tea’            #在文件"passwd"中的第2后面追加内容"tea"
sed 's/test/mytest/g' example          #将匹配到的字符串"test"替换成"mytest" (g:为全局替换)
sed –n‘s/root/&superman/p’ /etc/passwd #将匹配到的字符串"root"替换成"rootsuperman",并仅显示匹配到的行 (&:引用被替换的内容)
sed –n‘s/root/superman&/p’ /etc/passwd #将匹配到的字符串"root"替换成"supermanroot",并仅显示匹配到的行
sed  -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets#将匹配到的字符串"dog"替换成"cat",将匹配到的字符串"hi"替换成"lo"
sed –i.bak ‘s/dog/cat/g’ pets          #将匹配到的字符串"dog"替换成"cat",并在替换之前将文件备份成pets.bak

sed 的高级编辑命令

h:把模式空间中的内容覆盖至保持空间中
H:把模式空间中的内容追加至保持空间中
g:从保持空间取出数据覆盖至模式空间
G:从保持空间取出内容追加至模式空间
x:把模式空间中的内容与保持空间中的内容进行互换
n:读取匹配到的行的下一行覆盖至模式空间
N:追加匹配到的行的下一行至模式空间
d:删除模式空间中的行
D:删除当前模式空间开端至\n的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed
示例:
sed -n 'n;p' FILE       #显示偶数行
sed '1!G;h;$!d' FILE    #逆向显示文件内容
sed '$!N;$!D' FILE      #取出文件后两行;
sed '$!d' FILE          #取出文件最后一行;
sed 'G' FILE            #每行后面添加一行空白行
sed '/^$/d;G' FILE      #将空白行去重,仅显示一行
sed 'n;d' FILE          #显示奇数行;
sed -n '1!G;h;$p' FILE  #逆向显示文件中的每一行;

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

(0)
AleenAleen
上一篇 2016-08-09
下一篇 2016-08-09

相关推荐

  • Linux系统中的防火墙iptables

    iptables/netfilter——Linux系统下的防火墙 基本原理 防火墙主要功能 工作于主机或者网络边缘,对进出本主机或本网络的报文进行匹配检测,对匹配到规则的报文进行于规则相对应的处理。 防火墙主要分类 按功能分类 主机防火墙网络防火墙 按构成分类 软件防火墙硬件防火墙 Linux防火墙软件iptables/netfilter(以后简称iptab…

    Linux干货 2017-06-13
  • 初学正则表达式

      前言:     在学正则表达式之前,有小伙伴讲解说,正则表达式在文本处理上功能非常强大、使用非常普遍,并且现在很多的工具软件都支持它,以后的学习工作中会经常使用,非常灵活,但是灵活的同时又是繁琐,需要小心翼翼的仔细推敲。抱着认真、好奇的心思听完了王老的课。我自己理解的正则表达式是,给一些符号赋予一定的涵义…

    Linux干货 2016-08-12
  • 创建用户、用户组

    创建用户、用户组                  1解释Linux的安全模型   2解释用户帐号和组群帐号的目的   3用户和组管理命令   4理解并设置文件权限 5默认权限 6特殊权限 …

    Linux干货 2016-08-08
  • linux做路由并实现路由转发

    一、环境介绍 1.linux版本:CentOS6.8,CentOS7.2两台主机分别加载两块网卡,分别作为路由器的两个端口 2.实验在vmware虚拟机中完成 3.另有两台CentOS6.8和CentOS7.2作为两个网段的主机 4.实验图示: 二、路由1(左)和路由2(右)的设置 1.路由1配置信息 eth0网卡:    &n…

    Linux干货 2016-09-07
  • Centos7下安装httpd源码包

    今天小编来跟大家做个练习,就是如何在Centos7下安装httpd源码包. 一:下载httpd最新版本的源码包 [root@localhost ~]# rpm -qa |grep httpd //查询系统上是否已安装httpd包 httpd-tools-2.4.6-45.el7.centos.4.x86_64 httpd-2.4.6-45.el7.cento…

    2017-08-19
  • 系统启动这块的一些实验及基本内容–下

    下面我来讲下grub,grub在编辑的时候可以进入一种模式就是单用户模式,就是当grub.conf文件未写入密码时,普通用户将直接忽略系统密码进入系统,所以这可以称为一个捷径,也可以成为一个漏洞,当然linux的前辈们不可能连这个都想不到,他们也有自己的办法,这就是我们grub的两层加密机制,在选定登陆界面之前可以设置一次,启动内核时也可以设置一次,密码也可…

    Linux干货 2016-09-13