sed基本用法详解

一、sed介绍:

       sed是非交互式的编辑器,同时又是面向字符流的,一次处理一行文本。当前输入的行被缓存至一个被称为模式空间(pattern space)的内存空间中,与给定的模式进行比对,若不匹配,则将内容输出至屏幕,之后读取第二行;若匹配,则执行编辑命令,命令执行完成后,将模式空间中的内容输出至屏幕(默认行为)。之后再去读取第二行,再比对,再处理…一直重复到读取全部的文件内容。

       sed同grep、awk一样,匹配模式支持使用正则表达式。默认支持基本正则表达式,通过指定选项可支持扩展正则表达式。

       sed只有在使用特定选项的情况下才会对原文件做修改,当然,这个行为具有破坏性,应该慎用。sed的输出也可以采用重定向的方式保存至文本中。

二、sed用法:

       sed  [option]…  'script'  inputfile…

                     script:地址定界编辑命令

              1、常用options:

                     -n :不输出模式空间中的内容至屏幕。默认情况下,模式空间中的内容会被输出至屏幕。

                     -e script: 实现多点编辑。

                            例:sed -e script1 -e script2  somefile

                     -r :支持扩展正则表达式。sed默认支持基本正则表达式。

                     -f /path/to/sed_script_file:从指定文件中读取编辑脚本来处理文件。

                     -i :直接编辑原文件,危险操作,慎用。

例:将/etc/fstab拷贝至/tmp,命名为fs1。对比下-n参数的意义。(p命令为显示模式空间匹配到的内容。)

没加-n参数,因为默认情况下,模式空间中的内容会被输出至屏幕。我们又通过p命令让第三行输出了一次,所以第三行被输出了两次。

blob.png

看下,加上-n的效果。

blob.png

              2、地址定界

                     (1)空地址:对全文进行处理

                     (2)单地址:

                            #:指定行

                            /pattern/:被此模式匹配到的每一行。

                     (3)地址范围:

                              m,n:从第m行到第n行

                                   3,9

                              m,+n:从第#行开始,往后+n行,包含第m行

                                   3,+8

                              m,/pattern/:从指定的第m行开始,到第一次被pattern匹配的行

                              /pattern1/,/pattern2/:从第一次被模式1匹配到的行开始,到第一次被模式2匹配到的行结束。

                  (4)步进:~

                             1~2:所有奇数行。

                             2~2:所有偶数行

  例2.1:显示fs1文件的6到10行

blob.png

 例2.2:显示以#开头的行到以/dev开头的行。

它是这样显示的:从第一次匹配到#开头的行开始,到第一次匹配到以/dev开头的行结束。后面虽然还有以/dev开头的行,但是匹配也不会进行了。

blob.png

 例2.3:编辑num.txt文件,每行对应1-10中的一个数字,显示其奇数行和偶数行

 blob.png           

                     3、编辑命令

                            d:删除匹配到的行

                                   sed  '1,5d' /etc/fstab

                                   sed  '/^UUID/d'

                            p:显示模式空间中匹配的内容

                            a  \text:(append)在模式匹配到的行后面追加文本,支持使用\n实现多行追加

                            i  \text:(insert)在模式匹配到的行前面插入文本,支持使用\n实现多行插入

                                   sed '3a \new line\nanother new line'  /etc/fstab

                            c  \text:把匹配到的行替换为指定的文本

                            w  /path/to/somefile:保存模式匹配到的行至指定的文件中

                            r  /path/to/somefile : 读取指定为念的内容至被模式匹配到的行处;用于实现文件合并。

                            = :为被模式匹配到的每一行加上行号,行号会被当作一个新行

                            ! :取反

                                          位于模式之后,命令之前。地址定界!编辑命令

例:sed  -n '/^#/!p'  /etc/fstab

例3.1:删除所有以#开头的行

blob.png

例3.2:在以/dev开头的行后加上内容为“alpha”的行

blob.png

例3.3:在不以/dev开头的行后面加上内容为“alpha”的行。和上一题对比下结果。

blob.png

例3.4:读取/etc/issue的内容,并将其追加至以UUID开头的行后

blob.png

例3.5:将以/dev开头的行的内容替换为“this line has been replaced”

blob.png

                        4、查找替换

                            s///:查找替换,分隔符可自定义,如:s@@@ 或s###。

                                 替换标记:

                                     g:全局替换。s///g

                                     p:显示替换成功的行

                                     w  /path/to/somefile:将替换成功的行保存至指定的文件中。

                                                

                            sed 's@root@&hello@'  /etc/passwd:在root单词后加上hello

                            sed 's@root@hello&@' /etc/passwd:在root单词前加上hello

                            sed –i.bak ‘s/dog/cat/g’ pets  :在对pets文件做修改之前,先做备份,本分文件以".bak"结尾

 

例4.1:在fs1文件中不是以#开头的行的行首增加#号。

blob.png

例4.3:利用sed取出给定路径的基名和目录名

(1)取基名。需要使用正则表达式中的后向引用

blob.png

(2)取目录名

blob.png


原创文章,作者:M20-1钟明波,如若转载,请注明出处:http://www.178linux.com/32267

(0)
M20-1钟明波M20-1钟明波
上一篇 2016-08-10
下一篇 2016-08-10

相关推荐

  • Linux系统时间简单修改方法

          Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置。Linux中的所有命令(包括函数)都是采用的系统时钟设置。Linux操作系统运行…

    Linux干货 2015-06-12
  • N29第一周作业:初识Linux系统

    1、描述计算机的组成及其功能。
    2、按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别。
    3、描述Linux的哲学思想,并按照自己的理解对其进行解释性描述。
    4、说明Linux系统上命令的使用格式;详细介绍ifconfig、echo、tty、startx、export、pwd、history、shutdown、poweroff、reboot、hwclock、date命令的使用,并配合相应的示例来阐述。
    5、如何在Linux系统上获取命令的帮助信息,请详细列出,并描述man文档的章节是如何划分的。
    6、请罗列Linux发行版的基础目录名称命名法则及功用规定

    2018-03-04
  • grep、egrep、vim练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及内部文件的属组和其它用户均没有任何访问权限。         [root@localhost ~]# install -d -m 600&nb…

    Linux干货 2016-11-18
  • centos7上实现corosync V2 + pacemaker + pcs | crmsh备忘录

    1、集群配置的前提: 一、时间同步(ntpdate做crontab定时任务) 二、主机名和IP相互解析 三、基于ssh密钥主机互信 #ssh-keygen -t rsa #ssh-copy-id -i   集群的全生命周期管理工具: pcs: agent(pcsd) crmsh: agentless (pssh)     2、安…

    2017-11-15
  • Linux系统命令使用格式已经如何查看帮助

    在Linux 系统中有非常多的命令一般的命令格式:“COMMAND OPTIONS ARGUMENTS” 下面有一些基础命令可以体验下命令的基本格式用法 ifconfig命令    作用: 配置网络接口,查看网络接口信息    基本语法:     ifconfig  […

    Linux干货 2016-08-15
  • bash数据类型探秘

    数组 变量:存储单个元素的内存空间数组:存储多个元素的连续的内存空间,相当于多个变量的在调用变量时最好加双引号,对于字符串中含有空格等字符的能更好的调用集合。数组名和索引索引:编号从0开始,属于数值索引( 偏移量从默认0开始 )注意:索引可支持使用自定义的格式,而不仅是数值格式,即为关联索引, bash4.0版本之后开始支持。bash的数组支持稀疏格式(索引…

    Linux干货 2016-08-24