流编辑器 sed 学习笔记

学习手册 emacs info

 

1。

sed 一个流编辑器。

它能在一个文件或管道上进行基本的文本操作。

2。

如何调用sed?

sed OPTIONS... [SCRIPT] [INPUTFILE...]

没有说明INPUTFILE时,或者INPUTFILE是“-”,输入流为标准输入

命令行选项(OPTIONS)

--version

--help

-n 或者--quiet或者--silent

    取消自动打印功能,只打印 p 命令所指定的

-i[SUFFIX]或者--in-place[=SUFFIX]

    原地编辑,将编辑结果写回源文件,SUFFIX指明源文件如何备份,缺少的话就不备份

-l N或者--line-length=N指定较长的字符行如何回折[wrap],默认是70个字符

--posix

    遵从posix标准

-r或者--regexp-extended

    使用拓展的正则表达式,即'egrep'命令接受的

-s或者--seperate

    默认情况下,sed将所有输入文件当作一个连续的流,这个选项允许用户将他们看作分立的文件

-u或者--unbuffered

-e SCRIPT或者--expression=SCRIPT

  将命令添加到命令集中,即增加一个命令操作

-f SCRIPT-FILE或者--file=SCRIPT-FILE

    将SCRIPT-FILE中的命令添加到命令集中

3。sed programs

sed如何工作?

    sed维持这两个缓存 active _pattern_ space 和 auxiliary _hold_ space。开始的时候他们都是空的。

   sed重复着一个工作环:首先,从输入流中读入一行,去掉尾端的换行符,并把它放到pattern space里面。

  然后执行相应的命令集。命令关联着条件,只有条件满足,才能执行命令。当执行完最后一个命令时,如果没有-n选项,pattern space里的内容会打印到输出流,并把开始时去掉的换行符添上。然后开始下一个循环,读入下一行。

sed如何确定要处理的范围?或者说,寻址?

寻址方式:

    每种寻址方式都确定一系列行的范围。在寻址串后面跟一个感叹号!表示反选。

各种寻址方式:

    NUMBER

          直接指定第NUMBER行

    FIRST~STEP

          从第FIRST行开始,每隔STEP行选取一行。

    $

          匹配当前文件的最后一行

    /REGEXP/              /%REGEXP%

          选择匹配REGEXP正则表达式的行

    /REGEXP/I           /REGXP/M

          I表示忽略大小写, M表示多行。

 

正则表达式总览:

    普通字符对应它们自身

    *匹配零或多个它前面的个体

    '/+' 和*差不多,但至少匹配一次

    '/?' 和*差不多,但匹配零或着一次

    '/{I/}' 匹配I次

    '/{I,J/}' 匹配I到J次

    '/{I,/}'匹配至少I次

    '/(REGEXP/)' 将REGEXP作为一个整体

    '.' 匹配任何字符

    '^' 匹配行开始

    '$' 匹配行结束

    '[LIST]'

    '[^LIST]'

           匹配LIST中的任意字符,加上^表示匹配不是LIST中的任意字符

    ‘REGEXP/|REGEXP‘匹配至少其中一个表达式

    ‘REGEXP1REGEXP2’匹配两个表达式

    ’/DIGIT‘   向前引用第DIGIT个括号表达式

    '/n' 匹配换行符

    '/CHAR'  字符转义:  '$', '*', '.', '[', '/', '^'

例子:

 ‘abcdef' 匹配 'abcdef'

  'a*b' 匹配以b结尾的字符串,前面有零或多个a

  'a/?b' 匹配 'b' 或者 'ab'

  '//$'匹配以右斜线结尾的字符串

  '^/(.*/)/n/1$' 匹配一个字符串,该字符串包含两个相等的被换行符分割的字串

经常使用的命令

  '#' 注释一行

  'q [EXIT-CODE] 退出

  'd' 立即删除pattern aspace

  'p' 打印pattern space

  'n'

  '{ COMMANDS } 命令集

 

s命令

  完整格式

    s/REGEXP/REPLACEMENT/FLAGS 

        其中/可由其它字符代替,该字符在REGEXP或者REPLACEMENT中必须转义

    REPLACEMENT可以使用/N引用REGEXP匹配的第N部分

    REPLACEMENT中

           /L  将字符转化为小写,知道遇到 /E 或者/U

           /l    将后面一个字符小写

          /U   将字符转化为小写,知道遇到 /E 或者/L

          /u   将后面一个字符大写

    FLAGS

        g   应用于所有的匹配,不仅仅是默认的第一个

        NUMBER  应用第NUMBER个

        p 打印出来

        I i   大小写不敏感

        m M  多行匹配

你可能感兴趣的:(Linux,正则表达式,list,emacs,工作,file)