文本处理工具之sed

                          文本处理工具之sed

1、sed是一种行编辑器,对文本逐行处理。处理时,它会将文本行载入"模式空间"(临时缓冲区),接着用sed命令对模式空间的内容进行处理,处理完成后,将模式空间内容输出到显示屏
     与之类似的处理工具还有grep和awk,相比grep,sed不仅对文本有过滤功能,还可以对文本进行其他增删改的操作。而相比awk,sed显得更加简单高效。下面我们就来细说"sed"。
2、用法:sed  [options]   '地址 指令’   file......
    options:一些功能选项
    地址:匹配范围,可以是单行、多行,或者是匹配模式的行,模式支持正则表达式。
    指令:是sed自带的文本处理命令,如打印、删除、更改等。以下做详细解释
options
    -n      不打印模式空间         
    -e      多点编辑,同时处理多条指令   
    -f      读取脚本文件          
    -r      使其支持扩展正则表达式     
    -i      直接修改原文件         
地址
    1       首行                                                      
    n       指定行                                                     
    $       尾行                                                      
    n1,n2       从n1到n2之间所有的行                                                
    n1,+10      从n1开始算起,之后的10行                                          
    /patter/        匹配该模式的行,支持正则                                            
    /pat1/,/pat2/   两个匹配行之间的行,第一次匹配pat1,和第一次匹配part2之间的行。如果只匹配pat1,sed会打印pat1到行尾的所有行 
    n1~n2       ~代表步进,以n1为基准,n2为跳数匹配。如:1~2,就是打印奇数行                          
指令
    p       打印模式空间处理行和过滤行,常与-n一起使用,只打印过滤行
    d       删除过滤行                       
    =       打印行号                        
    q       退出脚本                        
    r       读取文件,通常与aic一起使用             
    w       将匹配内容输出到文件                  
    a\text      在匹配行后追加文本                   
    i\text      在匹配行前面追加文本                  
    c\text      替换匹配行内容                     
    !       通常在 '地址' 后面,表示取反                
    &       引用前面的字符串                    
    s///(g|p|w) 查找替换                        


示例:
                打印匹配行
#sed -n '1p' /etc/passwd            ##打印首行
#sed -n '$p' /etc/passwd            ##打印尾行
#sed -n '1,3p' /etc/passwd          ##打印前三行
#sed -n '1,3!p' /etc/passwd         ##打印除前三行之外的行
#sed -n '/root/,3p' /etc/passwd     ##打印匹配root到第三行之间的行  
#sed -n '/postfix/,$p' /etc/passwd      ##打印匹配行到尾行之间的行
#sed -n -e '1p' -e '$p' /etc/passwd     ##使用-e命令同时处理多条指令
#sed '/root/a\########' /etc/passwd     ##行后追加
#sed '/root/i\########' /etc/passwd     ##行前追加
#sed '/root/c\########' /etc/passwd     ##替换匹配行

                删除匹配行
#sed '1d' /etc/passwd           ##删除首行
#sed '1~2d' /etc/passwd         ##删除奇数行
#sed '10,$d' /etc/passwd        ##删除10行以后的行

                文本替换
#sed -n 's/root/ROOT/p' /etc/passwd     ##将每行首次出现的root替换为ROOT,并打印过滤行
#sed -n 's/root/ROOT/2p' /etc/passwd    ##将文本行中第二次出现的root替换为ROOT,打印该行
#sed -n 's/root/ROOT/gp' /etc/passwd    ##将全文出现的root全部替换成大写,并打印过滤行
#sed -n 's/bin/&2/gp' /etc/passwd       ##全文搜索,将bin替换成bin2,打印这些行

                实用的应用场景
#sed '/^#/d;/^$/d' /etc/fstab               ##去掉/etc/fstab中空行和以#开头的行
#sed -r 's@([^:]+):(.*):([^:]+)@\3:\2:\1@' /etc/passwd  ##将/etc/passwd文件中用户名和默认shell替换位置
--------上述示例,很好的利用了正则的分组匹配
--------([^:]+)表示匹配(非:字符一次以上)
#sed '10,$s/^/#/' /etc/passwd               ##为10行及其之后的行添加#注释符

3、sed高级功能
    sed除了以上基本的文本处理能力外,还具备一些高级用法。
    保持空间:和模式空间一样,也是在sed命令执行的时候,内存给其分配的一块缓冲空间。相比模式空间,保持空间只是一块临时存储空间,其内容不会直接被sed命令处理输出到屏幕
    高级编辑命令
    h       将模式空间内容覆盖至保持空间  
    H       将模式空间内容追加至保持空间  
    g       将保持空间内容覆盖模式空间   
    G       将保持空间内容追加至模式空间  
    x       将保持空间内容和模式空间互换  
    n       读取匹配行的下一行覆盖至模式空间
    N       读取匹配行的下一行追加至模式空间 
文本处理工具之sed 如图:
    h:执行h命令,保持空间内容将变为a。
    H:执行H命令,保持空间内容将变为a\nb\nc\n
    g:执行g命令,模式空间将变为b\nc
    G:执行G命令,模式空间内容变为a\nb\nc
    x:执行x命令,模式空间内容变为b\nc,保持空间内容变为a  二者互换
    n:执行n命令,模式空间内容直接变为d,a直接覆盖,不做任何处理
    N:执行N命令,模式空间内容将变为a\nd
示例  (如上图,txt为a b c d e f  六行内容)
#sed -n 'n;p'  txt      该命令打印txt偶数行 
b
d
f
#sed '1!G;h;$!d'  txt   ##1!G:表示只要不是第一行,都执行G命令。$!d:表示只要不是最后一行,都执行d命令
f
e
d
c
b
a   
#sed '$!N;$!D' txt  ##$!N:表示只要不是最后一行就执行N命令;$!D:表示只要不是最后一行就执行D命令
e
f
#sed -n '1!G;h;$p'  txt ##1!G:表示只要不是第一行就执行G命令,$p:表示最后一行执行p命令
f
e
d
c
b
a

综上:sed命令操作简洁、高效,是linux下必学文本处理工具之一,灵活掌握sed用法,对编写脚本起到很大的帮助

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

(0)
AbigheartAbigheart
上一篇 2017-03-17 20:11
下一篇 2017-03-18 10:32

相关推荐

  • RAID(重要)

    RAID   RAID(Redundent Array of Independent Disk):独立的冗余磁盘阵列,目的是为了结合多个物理驱动器组成单个单元,提高了磁盘的性能或保证数据冗余。RAID能够防止硬件的故障导致数据丢失,但是不能防止人为操作,软件故障、恶意软件感染等造成的数据丢失,因此不能替代备份。 分类有:硬件实现RAID(一是外接式磁盘阵列柜…

    Linux干货 2016-08-30
  • Linux基于OpenSSL实现私有CA构建

    前言 随着互联网的迅猛发展,网络通信已经成为传递信息的主要途径。而通信时的数据传输大部分却是明文传输的,在网络这个不安全的环境下,如果没有一套数据加密机制,就会导致敏感信息和重要数据泄露,引起不可估量的损失。而OpenSSL正好弥补了这一缺憾,那什么是OpenSSL呢?OpenSSL是一套强大的具有加密功能的组件,它包含libcrypto(公共加密库)、li…

    Linux干货 2015-04-13
  • linux文件管理及bash的基本特性

    一、常用的文件和目录管理命令1、pwd命令:用来显示当前的工作目录语法格式:直接输入pwd回车显示当前的工作目录示例:用pwd命令显示当前的工作目录[root@suyiwen ~]# pwd/root2、mkdir命令:用来创建目录文件语法格式:mkdir [OPTION]… DIRECTORY…常用option:-m,用来指定目录的…

    Linux干货 2018-03-11
  • iptables

    一、前言 什么是iptables?当我们启动iptables时,使用service命令可以启动iptables。但是并非使用service启动的iptables就能说明其是一个服务。Iptables是一个便以我们写规则的工具,真正起作用的是内核中的netfilter一个框架。Netfilter内置了5个hook函数,当一个数据包交由此机器时,经过这5个hoo…

    Linux干货 2015-10-27
  • DHCP服务介绍及搭建

    DHCP服务介绍及搭建

    2018-01-16
  • Shell 变量类型及用法

    一、      什么是变量          变量源于数学,在计算机语言中能储存计算机结果或能表示值的抽象概念,变量可以由变量名访问,在指令语言中,变量通常是可变的。Linux是一个多用户的操作系统。每个用户登录系统后,都会有一个…

    Linux干货 2016-08-12

评论列表(1条)

  • N24_Jerry
    N24_Jerry 2017-04-20 17:07

    通俗易懂,逻辑清晰,循环渐进,实乃经典中的经典!!