Linux文本处理工具之sed

原创 2014年12月26日 10:44:26
    概念:
        sed是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓存区中,称为"模式空间(pattern space)",接着用舍得命令处理缓冲区中的内容,处理完成后,把缓存区的内容输出。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你是用重定向存储输出。sed主要用来编辑一个或多个文件。
    格式:
        sed [-nefri] 'command' 输入文本
    常用选项:
        -n:使用安静(silent)模式。在一般sed的用法中,所有来自STDIN的资料一般都会被列出到终端上。但如果加上-n参数之后,则只有经过sed特殊处理的那一行(或者动作)才会被列出来。
        -e:直接在指令列模式上进行sed的动作编辑
        -f:直接将sed的动作写在一个档案内,-f filename则可以执行filename内的sed动作
        -r:sed的动作支援的是延伸正规表示的语法(预设是几次正规表示法的语法)
        -i:直接修改读取的档案内容,而不是由荧幕输出
    动作说明:
        [n1[,n2]] 常用命令:不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

    常用命令:
        a:追加,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行)
        c:更改,c的后面可以接字符串,这些字符串可以取代n1,n2之间的行
        d:删除,d的后面不接受任何东西
        i:插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行)
        p:列印,讲某个选择的资料印出,通常会与参数-n一起出现
        s:替换,可以直接进行替换的工作,sed 's/要替换的字符串/新的字符串/flags',这里修饰替换的标志flags有:
        g:表示在行内进行全局替换,而没有g时通常只有第一次出现的时候被替换
        n:1-512之间的一个数字,表示对本模式中指定模式第n次出现的情况进行替换

        p:打印模式空间的内容

        w:将模式空间的内容写入file中

       q:结束或退出sed


    举例:
        1.删除某行
            a.sed '2d' file                   #删除第二行
            b.sed '$d' file                   #删除最后一行
            c.sed '1,5d' file                   #删除第一行到第五行
            d.sed '5,$d' file                 #删除第五行到最后一行
            e.sed '/My/,/You/d' file          #删除包含"My"的行到包含"You"的行之间的行
            f.sed '/My/,10d' file              #删除包含"My"的行到第十行的内容
            g.sed '/^$/d' file                 #删除空行
        2.显示某行
            a.sed -n '2p' file       #显示第二行
            b.sed -n '$p' file    #显示最后一行
            c.sed -n '1,5p' file  #显示第一行到第五行
            d.sed -n '5,$p' file  #显示第五行到最后一行
        3.模式进行查询
            a.sed -n '/sed/p' file    #查询包括关键字sed所在的所有行
            b.sed -n '/\$/p'  file    #查询包括关键字$所在所有行,使用"\"屏蔽特殊含义
        4.增加一行或多行字符串
            a.sed '1a test' file             #在第一行后新增字符串"test"
            b.sed '1,3a test' file             #在第一行到第三行后新增字符串"test"
            c.sed '1a test\ntest' file         #在第一行后新增多行,使用换行符\n
        5.替代一行或者多行或者一行中的某部分
            a.sed '1c test' file             #第一行的内容替换为test
            b.sed '1,2c test' file             #第一行到第二行的内容替换为test
            c.sed '1,5s/a/A/' file             #第一到第五中的首个a替换为A
            d.sed '/B/s/a/A/g'  file         #将有B的行中的a替换为A
        6.插入
            a.sed -i '$a test' file     #在最后一行直接输入test
        7.多点编辑
            a.sed -e '3,$d' -e 's/Test/test' file #先删除第三行到最后一行的数据,然后将"Test"替换为"test",$需要和正则表达式的$区分开,在此处表示行的结束
            b.sed -e '3,$d; s/Test/test' file      #效果同上
        8.脚本
            a.讲以下命令保存在一个文本中(sed-script)
                3i\
                ~~~~~~~~~~~~~~~~~~~~~
                3,$s/\(hrwang\) is \(mjfan\)/\2 is \1/
                $a\
                We will love eachother forever!!
            b. sed -f sed-script file
           上边的脚本还可以进一步的优化
            a.将以下命令保持在一个sh脚本中(sed-script)
                #!/bin/sed -f
                3i\
                ~~~~~~~~~~~~~~~~~~~~~
                3,$s/\(hrwang\) is \(mjfan\)/\2 is \1/
                $a\
                We will love eachother forever

            b../sed-script file

        9.退出

            a. sed '/^name/q' file  #在匹配到之后,sed会输出这一行,然后再退出

            b. sed '2q'  file     #输出第二行之后就退出

            c. sed  ‘/name/{ s/name/NAME/ ;q; }’ file  #在某行包含了name,把name替换成NAME,然后退出sed

    注意:
        1.sed -i 这个动作会直接修改到原始的文件,慎用。
        2.sed -e 这个动作表示多点编辑
        3.sed脚本就是写在文件中的一系列sed命令。脚本中,要求命令的末尾不能有任何多余的空格或文本。如果在一行中有多个命令,要用分号分隔。执行脚本时,sed先将输入文件中第一行复制到模式缓冲区,然后对其执行脚本中所有的命令。每一行处理完毕后,sed再复制文件中下一行到模式缓冲区,对其执行脚本中所有命令。使用sed脚本时,不再用引号来确保sed命令不被shell解释。
        4.sed命令可以指定零个、一个或两个地址。每个地址都是一个描述模式、行号或者行寻址符号的正则表达式。如果没有指定地址,那么命令将应用于每一行;如果只有一个地址,那么命令应用于与这个地址匹配的任意行;如果指定了有逗号分隔的两个地址,那么命令应用于匹配第一个地址的第一行和它后面的行,直到匹配第二个地址的行(包括此行),可以把第一个地址看做是启用动作,并把第二个地址看做是禁用动作;如果地址后面跟有感叹号(!),那么命令就应用于不匹配该地址的所有行。
    行定位的使用
        5.sed命令中c和s的区别(c直接更改,s替换)

linux系统三大文本处理工具grep、sed及awk的简单介绍

grep、sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了。只不过,相比较而言,sed和awk功能更...
  • u011630575
  • u011630575
  • 2016年07月26日 11:25
  • 1432

Linux文本处理三剑客(awk)

Linux文本处理三剑客(awk)      awk(报表生成器)是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来...
  • William234
  • William234
  • 2017年04月10日 16:49
  • 436

shell浅谈之七文本处理工具grep、sed、awk

一、简介       Bash Shell提供了很多字符串和文件处理的命令。如awk、expr、grep、sed等命令,还有文件的排序、合并和分割等一系列的操作命令。grep、sed和awk内容...
  • taiyang1987912
  • taiyang1987912
  • 2014年09月16日 19:28
  • 16180

linux文本处理工具之sed

sed   '2,5d' file 显示文件file,除去2-5行,但行数超过文件实际行数时不会报错。 sed '/10[1-4]/d'     file 显示文件file,除去包含101-104的...
  • sunxing007
  • sunxing007
  • 2012年02月29日 16:04
  • 981

linux之sed用法 (文本处理工具)

 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法 sed命令行格式为:      ...
  • wuli2496
  • wuli2496
  • 2015年05月28日 20:14
  • 318

Unix文本处理工具之sed

和上文提到的awk一样,sed也是Unix的文本处理工具。sed是Stream Editor(流式编辑器)的缩写,它能够基于模式匹配过滤(所谓过滤就是在文件中找到符合某些条件的行)修改文本(就是对找到...
  • xia7139
  • xia7139
  • 2013年08月24日 19:00
  • 1324

文本处理工具sed

文本处理工具有好多种,上次介绍了grep,这次介绍一下sed。sed全名stream editor,意为行编辑器,或者流编辑器。Sed是逐行进行编辑的,下面介绍常规用法和高级用法。 格式:sed ...
  • lllxzhsx
  • lllxzhsx
  • 2017年08月27日 19:00
  • 57

sed文本处理工具

Sed 简介 sed是一种新型的,非交互式的编辑器。它能执行与编辑器 vi 和 ex 相同的编辑任务。sed编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上...
  • gui951753
  • gui951753
  • 2018年01月30日 16:31
  • 40

Sed文本处理工具

本章思维导图: 一、Sed概述 1、Sed定义: Sed(Stream EDitor)行编辑器,Sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲 区中,称为...
  • Barry264
  • Barry264
  • 2018年01月30日 17:48
  • 44

Linux中的高级文本处理命令,cut命令,sed命令,awk命令

1.2.1 cut命令  cut命令可以从一个文本文件或者文本流中提取文本列。 cut语法[root@www ~]# cut -d'分隔字符' -f fields    ## 用于有特定分隔字符[ro...
  • toto1297488504
  • toto1297488504
  • 2017年01月01日 17:10
  • 2028
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux文本处理工具之sed
举报原因:
原因补充:

(最多只允许输入30个字)