文本处理工具之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

相关推荐

  • N26-第六周作业-邢岩

    马哥门徒-N26-邢岩      一直以来都用windows 的word来编辑文件,从今天开始,我又学会了新的编辑文件方式了,掩饰不住愉悦的心情!没错,就是vim 编辑器,一个神奇的编辑器!让我来详细介绍一下这个神器是如何使用的吧。     vim:vim其实就是(VI IMproved) vi增强…

    Linux干货 2017-02-26
  • linux内核(kernel)版本号的意义

      在linux下有一个目录,即/usr/src/kernels/目录,下面记载着一个linux系统的内核文件, 例如:2.6.18-164.el5-x86_64、2.6.18-8.el5-x86_64和2.6.18-194.el5-x86_64等,这些文件编号意味着什么呢?例如2.6.18代表着什么?el5代表着什么?x86_64又代表着什么? …

    Linux干货 2016-01-14
  • 2016-08-18博客作业

    case 语句 条件判断语句 case 用 变量引用 in PAT1) 分支1 ;; PAT2) 分支2 ;; … *) 默认分支 ;; esac   case 支持glob 风格的通配符: *       任意长度任意字符 ?    &…

    Linux干货 2016-09-19
  • 第八周 服务管理与文本处理

    1、简述systemd的新特性及unit常见类型分析,能够实现编译安装的如nginx\apache实现通过systemd来管理 2、描述awk命令用法及示例(至少3例) 3、描述awk函数示例(至少3例)    

    2018-01-21
  • 基于通用二进制格式安装mysql

    实验环境: Linux主机:centos6.8 mysql二进制格式包:mysql-5.5.52-linux2.6-x86_64.tar.gz 1、解压包到特定目录 [root@centos6 ~]# tar xf mysql-5.5.52-linux2.6-x86_64.tar.gz -C /us…

    Linux干货 2016-10-29
  • 权限(用户、特殊、ACL)

    root权限(id=0) root无论在什么情况下都有rw权限,但是是否拥有x权限,要分情况: 第一,文件所有者和所属组都无x权限,root也无x权限; 第二,文件所有者和所属组二者任何一个有x权限,root就有x权限。 用户得到的权限 匹配顺序:文件所有者——文件所属组——其他人(从左到右) 用户访问文件,一旦按次序匹配成功,其获得的权限就是匹配选项所对应…

    Linux干货 2017-05-30

评论列表(1条)

  • N24_Jerry
    N24_Jerry 2017-04-20 17:07

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