sed

作者: 溺水的漂流瓶 | 来源:发表于2016-05-05 14:06 被阅读0次

    一、sed命令基本用法

    sed只是对缓冲区中原始文件的副本进行编辑,并不是编辑原始的文件。

    如果需要保存sed改动的内容,有两种方式:

    (1)将输出重定向到另一个文件

    (2)使用sed编辑命令中的w选项

    调用sed有三种方式,命令格式如下:

    (1)在shell命令行输入命令调用sed,格式为:

    sed [选项] 'sed命令' 输入文件

    注意:需要用单引号将sed命令引起来

    (2)将sed命令插入脚本文件后,然后通过sed命令调用它,格式为:

    sed [选项] -f sed脚本文件 输入文件

    (3)将sed命令插入脚本后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为:

    ./sed脚本文件 输入文件

    注意:sed命令通常由定位文本行和sed编辑命令两部分组成,sed编辑命令对定位文本行进行各种处理。

    sed的常用选项:

    -n:不打印所有的行到标准输出

    -e:表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略

    -f:表示正在调用sed脚本文件

    sed定位文本的方法:

    x:x为指定行号

    x,y:指定从x到y的行号范围

    /pattern/:查询包含模式的行

    /pattern/pattern/:查询包含两个模式的行

    /pattern/,x:从与pattern的匹配行到x号行之间的行

    x,/pattern/:从x号行到与pattern的匹配行之间的行

    x,y!:查询不包括x和y行号的行

    sed编辑命令:

    p:打印匹配行

    =:打印文件行号

    a\:在定位行号之后追加文本信息

    i\:在定位行号之前插入文本信息

    d:删除定位行

    c\:用新文本替换定位行

    s:使用替换模式替换相应模式

    r:从另一个文件中读文本

    w:将文本写入到一个文件

    y:变换字符

    q:第一个模式匹配完成后退出

    l:显示与八进制ASCII码等价的控制字符

    {}:在定位行执行的命令组

    n:读取下一个输入行,用下一个命令行处理新的行

    h:将模式缓冲区的文本复制到保持缓冲区

    H:将模式缓冲区的文本追加到保持缓冲区

    x:互换模式缓冲区和保持缓冲区内容

    g:将保持缓冲区的内容复制到模式缓冲区

    G:将保持缓冲区的内容追加到模式缓冲区

    二、sed命令选项

    1、sed命令的-n选项

    -n选项表示“不打印”功能是指:不打印sed编辑对象的全部内容。

    sed匹配关键字也是大小写敏感的

    sed -n '3,6p' input

    sed -n '/certificate/p' input

    2、sed命令的-e选项

    -e选项指定其后面紧跟着的字符串为sed编辑命令

    sed不支持同时带多个编辑命令的用法

    带多个编辑命令sed的一般格式为:

    sed [选项] -e 编辑命令1 -e 编辑命令2 ... -e 编辑命令n 输入文件

    sed -n -e '/Certificate/p' -e '/Certificate/=' input

    3、sed命令的-f选项

    -f选项只有调用sed脚本文件时才起作用

    三、sed文本定位

    1、匹配元字符

    sed -n '/\./p' input      #匹配.符号

    2、使用元字符进行匹配

    sed基本编辑命令可以放在单引号内,也可放在单引号外。

    sed -n '$'p input      #匹配最后一行

    3、!符号

    !符号表示取反,x,y!表示匹配不在x和y行号范围内的行。

    x!表示匹配除了x行号外的所有行,但是!符号不能用于关键字匹配,如无法表示不与/pattern/匹配的行。

    sed -n '2,10!p' input

    4、使用行号与关键字匹配限定行范围

    sed -n '/seugrid/,$p' input      #打印与seugrid的匹配行到最后一行

    四、sed基本编辑命令

    1、追加文本

    sed编辑命令a\符号用于追加文本,它可以将指定文本的一行或多行追加到指定行后面。如果不指定文本追加位置,sed默认放置到每一行后面,追加文本的格式:

    sed "指定地址a\text" 输入文件

    指定地址以匹配模式/pattern/或行号的形式给出,用于定位新文本的追加位置,sed对a\后的文本进行追加操作。

    2、插入文本

    插入文本和追加文本类似,区别仅在于追加文本是在匹配行的后面插入,而插入文本是在匹配行的前面插入,sed编辑命令的插入文本符号为i\,插入文本的格式为:

    sed '指定地址i\text' 输入文件

    3、修改文本

    修改文本是指将所匹配的文本行利用新文本行替代,sed编辑命令的修改文本符号为c\,修改文本的格式为:

    sed '指定地址c\text' 输入文件

    4、删除文本

    sed删除文本命令可以将指定行或指定行的范围进行删除,sed编辑命令的删除文本符号为d,删除文本的格式为:

    指定地址 d

    注意:sed编辑命令中的删除操作符号是d,后面不带“\”符号,与追加、插入、修改等命令有所区别。

    sed '$d' input      #删除最后一行文本

    5、替换文本

    sed替换文本操作将所匹配的文本行利用新文本替换,替换文本与修改文本功能有相似之处,区别在于修改文本是对整行进行修改,替换文本可以替换一个字符串。sed编辑命令的替换文本符号为s,替换文本的格式为:

    s/被替换的字符串/新字符串/[替换选项]

    sed替换选项:

    g:表示替换文本中所有出现被替换字符串之处

    p:与-n选项结合,只打印替换行

    w文件名:表示将输出定向到一个文件

    默认情况下,sed s命令将替换后的全部文本都输出,如果要求只打印替换行,需要结合使用-n和p选项,命令格式如下:

    sed -n 's/被替换的字符串/新字符串/p' 输入文件

    sed -n '/Certificate/CERTIFICATE/p' input

    sed替换命令在默认情况下,即不带g选项时,对某行的第1处匹配关键字进行替换后,就跳转到下面匹配行。而g选项使得sed替换命令对某行的所有关键字都进行替换。

    sed替换文本命令还可指定替换第几次匹配的关键字,只需在替换选项加上相应的数字即可,数字范围需要在1~512之间。

    sed -n 's/seu/njue/2p' input      #sed替换第3次匹配

    w选项后加文件名表示将输出定向到这个文件,如果输出文件未曾建立,sed命令自动建立输出文件,默认目录是当前工作目录。

    sed -n 's/seu/njue/w output' input      #将seu字符串改为njue,并将结果写入到ouput文件

    &符号可用来保存被替换的字符串以供调用。如果我们需要将seu用圆括号括起来,可用以下两条等价的命令:

    sed -n 's/seu/(&)pg' input

    sed -n 's/seu/(seu)/pg' input

    6、写入一个新文件

    sed命令指示对缓冲区中输入文件的复制内容进行编辑,如果要保存编辑结果,需要将编辑后的文本重定向到另一个文件,sed写入文件的符号为w,基本格式为:

    指定地址 w 文件名

    w的用法与sed替换文本中w选项相似

    sed -n '/globus/w output' input      #将匹配globus的行写入文件

    7、从文件中读入文本

    sed命令还可将其他文件中的文本读入,并附加在指定地址之后,sed读入文件的符号为r,基本格式为:

    指定地址 r 文件名

    sed '/Certificate/r otherfile' input

    8、退出命令

    sed命令的q选项表示完成指定地址的匹配后立即退出,基本格式为:

    指定地址 q

    sed -n '/.r.*/p' input      #查找任意字符后跟r字符,再跟0个或多个任意字符的字符串

    9、变换命令

    sed命令的y选项表示字符变换,它将一系列的字符变换为相应的字符,sed y命令是对字符的逐个处理,基本格式为:

    sed 'y/被变换的字符序列/变换的字符序列/' 输入文件

    sed y命令要求被变换的字符序列和变换的字符序列等长,否则sed y命令将报错。

    sed 'y/fmj/FMJ/' input      #将fmj三个字符变换为大写

    10、显示控制字符

    控制字符就是非打印字符,sed l命令可以显示文件中的控制字符,方便用户对控制字符进行处理。

    sed -n '1,$l' control

    11、在定位行执行命令组

    sed编辑命令中的“{}”符号可以指定在定位行上所执行的命令组,它的作用与sed的-e选项类似,都是为了在定位行执行多个编辑命令。

    sed -n '/Certificate/{p;=}' input

    相关文章

      网友评论

          本文标题:sed

          本文链接:https://www.haomeiwen.com/subject/fvzlrttx.html