sed详解与入门

sed,stream editor,流编辑器,输入一段文本,通过处理,得到修改的文本,一个很简单却又很复杂的功能,简单在于只是处理文本,复杂在于需要支持文本处理的全部要求,增删查改等功能。

源文件file,下列操作都是以此文件操作:

first
second
third
first sed

增:

  1. 增加一行文字:sed ‘1 a this is a line‘ file;a代表append;
  2. first
    this is a line
    second
    third
    first sed
  3. 插入一行文字:sed ‘1 i this is a line‘ file;i代表insert;
  4. this is a line
    first
    second
    third
    first sed
  5. 在行首或行尾增加一个单词:sed ‘s/^/#/‘ file;s代表substitute,^代表行首,$代表行尾;
  6. #first
    #second
    #third
    #first sed

        删:

  1. 删除一行文字:sed ‘2 d‘ file;d代表delete;
  2. first
    third
    first sed
  3. 删除多行文字:sed ‘2,3 d‘ file;2,3代表起始行号和终止行号;
  4. first
    first sed
  5. 删除某个单词:sed ‘s/first//g‘ file;g代表global;替换全部first为空,如果是数字n,则替换第n个first,如果是数字n和g,如2g,则替换第n个之后的first;
  6. second
    third
     sed

        查:

  1. 打印某行:sed -n ‘2 p‘ file;p代表print;
  2. second
  3. 打印多行:sed -n ‘1,2 p‘ file;-n选项代表不输出模式空间的数据(什么是模式空间后面会说);
  4. first
    second
  5. 打印包含某个单词的行: sed -n ‘/first/p‘ file;匹配first,也可以使用正则表达式;
  6. first
    first sed
  7. 打印包含A单词又包含B单词的行:sed -n ‘{/first/{/sed/p}}‘ file;大括号{}代表嵌套命令,先匹配first,在匹配sed,然后p,或者用d删除等都可以;
  8. first sed
  9. 打印包含A单词却不包含B单词的行:sed -n ‘{/first/{/sed/!p}}‘ file;感叹号!代表非,反操作;
  10. first
  11. 打印包含A单词的后续几行:sed -n ‘/second/,+1p‘ file;+1代表后续一行;
  12. second
    third
  13. 打印奇数或偶数行:sed -n ‘p;n‘ filesed -n ‘n;p‘ file;前者奇数行,后者偶数行;分号;代表执行多个sed命令,使用-e选项,如sed -e ‘……‘ -e ‘……‘ file 也有同样效果;至于n命令后面会谈到。
  14. first
    third
    second
    fisrt sed

  改:

  1. 将A修改为B:sed ‘ s/first/one/g‘ file
  2. one
    second
    third
    one sed
  3. 将某行从小写转换为大写:sed ‘2 y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/‘ file;y代表yank(猜测与vim的y代表的意思是差不多的);其实就是映射,a映射为A,b映射为B;
  4. first
    SECOND
    third
    first sed
  5. 替换某行的文字:sed ‘1 c abc‘ file;c代表change;
  6. abc
    second
    third
    first sed
    以上是sed的一些使用例子,下面谈谈它的其它内容。

    pattern space(模式空间)与选项-n

    模式空间在sed里对初学者是特别难懂的一个东西,说白了,它就是一个缓冲区,将数据读入缓冲区,在缓冲区处理,并输出缓冲区的内容,这也就是为什么不会修改源文件的内容。

    至于选项-n,要求sed不输出缓冲区的内容,大部分都只有打印时才会使用,大致流程如下伪代码:

    for line in file                        //循环读入每行数据
     do
          pattern_space = line              //将当前行数据写入模式空间
          pattern_space = exec(sed_cmd,pattern_space)  //执行sed的命令,并将处理完的数据写回模式空间
          if "-n" no exist                  //如果没有选项-n
                print pattern_space         //则输出模式空间的数据
     done

    选项-i,直接修改源文件

    上述的sed操作执行都不会对源文件作任何改动,相当于copy了一个副本出来操作相应的命令,但如果我们需要直接在源文件上修改,该怎么办,查man会知道,-i选项会使命令在源文件上操作。

    地址

    在使用sed,命令的格式都类似这样,“1,2s/a//g”,"2p","1,3d","/wo/,+3p","2!p","p";sed处理的数据,都有起始行,到结束行,限定一定的区域,大致的格式是这样,[begin,[end]][!]cmd,begin或end可以由数字或者正则式表示。

    n与N

    看别人的sed脚步,有时会看到n与N命令,类似这样的,sed -n ‘n;p‘ file,代表输出偶数行,单独的一个p肯定是输出全部的,那多了个n为什么就是偶数行?了解一下n或N命令做了什么事。

    • n,sed先读取第一行到模式空间,调用n命令,读取第二行,覆盖模式空间;n>模式空间
    • N,sed先读取第一行到模式空间,调用N命令,读取第二行,追加到模式空间;N>>模式空间

     g与G、h与H、x

这几个命令,与另一概念有关,hold space,相当于模式空间的缓冲区,与n/N命令相似,g与h都是覆盖,G与H都是追加;

g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除

G: 将hold space中的内容append到pattern space\n后

h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除

H: 将pattern space中的内容append到hold space\n后

x: 交换pattern space和hold space的内容

举个栗子:

pattern space hold space
abc \n
g \n \n
G abc\n \n
h abc abc
H abc \nabc
x \n abc

附:

使用的一些相关正则:

(^):开头

($):结尾

(\<):词首

(\>):词尾

(.):任何单字符

(*):某个字符出现0次或多次

([  ]):字符集合

(&):被匹配的变量

(=):行号

sed详解与入门

时间: 2024-12-21 04:13:00

sed详解与入门的相关文章

三剑客之 sed详解

    sed 作者:Jack.X 归档:学习笔记 2017/4/13 三剑客之sed 第1章 sed详解: 1.1 sed介绍: sed是linux命令中三剑客的老二,sed命令是操作.过滤和转换文本内容的强大工具,常用功能有增删改查(增加,删除,修改,查询).其中查询的功能中最常用的两大功能是过滤(过滤指定字符串),取行(取出指定行). 我先在用的sed版本是GNU开源版本的,实验环境是Centos6.8系统,内核是2.6.32-642.el6.x86_64 [[email protecte

Python基础知识详解 从入门到精通(七)类与对象

本篇主要是介绍python,内容可先看目录其他基础知识详解,欢迎查看本人的其他文章Python基础知识详解 从入门到精通(一)介绍Python基础知识详解 从入门到精通(二)基础Python基础知识详解 从入门到精通(三)语法与函数Python基础知识详解 从入门到精通(四)列表.元组.字典.集合Python基础知识详解 从入门到精通(五)模块管理Python基础知识详解 从入门到精通(六)文件操作PS:很多人在学习Python的过程中,往往因为遇问题解决不了或者没好的教程从而导致自己放弃,为此

三剑客之老二sed详解

    三剑客之老二sed 第1章 sed介绍 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令效率不高,这就好比一块空地准备搭建房子,请了10个师傅拿着铁锹挖地基,花了一个月的时间才挖完,而另外一块空地则请了个挖土机,三下五除二就搞定了,这就是效率.而在linux中的"挖土机"有三种型号:顶配awk,中配sed,标配grep.使用这些工具,我们

sed 详解

sed命令详解 1.sed -n '2'p filename 打印文件的第二行. 2.sed -n '1,3'p filename 打印文件的1到3行 3. sed -n '/Neave/'p filename 打印匹配Neave的行(模糊匹配) 4. sed -n '4,/The/'p filename 在第4行查询模式The 5. sed -n '1,$'p filename 打印整个文件,$表示最后一行. 6. sed -n '/.*ing/'p filename 匹配任意字母,并以ing

sed 详解【转】

原文地址:http://www.cnblogs.com/sparkdev/archive/2017/07/10/7138073.html 基本命令格式 sed [常用选项] 命令文本 输入 常用选项 -n (--quiet, --silent):安静模式.在 sed 的基本用法中,所有来自标准输出的信息都会被列出到终端上.加上 -n 参数后,则只有被sed 处理的那些行才会被输出.    -e:指定在指令列模式上执行的命令文本.默认不需要指定,只有同时要执行多个命令文本时才需要显式的指定 -e

sed详解

之前,写过一篇grep正则表达式的文章.这篇记录下与grep命令具有类似相同功能的两个命令,sed和awk.grep是文本搜索工具,sed是非交互式流编辑器,awk是一种文本格式化工具. sed是一个非交互式的流编辑器.所谓非交互式,是指使用sed只能在命令行下输入编辑命令来编辑文本,然后在屏幕上查看输出:而所谓流编辑器,是指sed每次只从文件(或输入)读入一行,然后对该行进行指定的处理,并将结果输出到屏幕(除非取消了屏幕输出又没有显式地使用打印命令),接着读入下一行.整个文件像流水一样被逐行处

Linux之sed详解

文本处理三剑客:   grep, egrep, fgrep:文本过滤器   sed:Stream EDitor,流编辑器,行   awk:文本格式化工具,报告生成器 sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间" (pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾. sed命令格式 sed [OPTION]...  'script' 

Linux中的sed详解

Sed简介 Sed取各种内容 Stream Editor  流式编辑器 又称行编辑器每次只编辑一行.Sed工作是在"模式空间"中进行的并不操作源文件.对源文件无危害. Sed使用格式 sed [-nefri] 'command' 输入文本 sed使用参数 -n 使用安静(silent)模式.在一般 sed 的用法中所有来自 STDIN 的数据一般都会被列出到终端上.但如果加上 -n 参数后则只有经过sed 特殊处理的那一行(或者动作)才会被列出来. -e 直接在命令列模式上进行 sed

JQuery详解-JQuery入门环境的配置

JQuery是一个优秀的javascript库,凭借简洁的语法和跨平台的兼容性,极大的简化了JavaScript开发人员的工作. JQuery的入门介绍: 1.JQuery库类型说明: JQuery的库类型分为两种,分别是 2.获取JQuery的最新版本 登录jquery的官方网站(www.jquery.com),下载最新的JQuery库文件. 3.JQuery的环境配置 Jquery不需要安装,只需要把下载的库文件放到网站项目里,想要在某个网页使用JQuery,只需要在相关的HTML文档中引入