<ins id='wqezr'></ins>
    <i id='wqezr'></i>

    <acronym id='wqezr'><em id='wqezr'></em><td id='wqezr'><div id='wqezr'></div></td></acronym><address id='wqezr'><big id='wqezr'><big id='wqezr'></big><legend id='wqezr'></legend></big></address>

  1. <fieldset id='wqezr'></fieldset>
    <i id='wqezr'><div id='wqezr'><ins id='wqezr'></ins></div></i>

      <code id='wqezr'><strong id='wqezr'></strong></code>

      1. <tr id='wqezr'><strong id='wqezr'></strong><small id='wqezr'></small><button id='wqezr'></button><li id='wqezr'><noscript id='wqezr'><big id='wqezr'></big><dt id='wqezr'></dt></noscript></li></tr><ol id='wqezr'><table id='wqezr'><blockquote id='wqezr'><tbody id='wqezr'></tbody></blockquote></table></ol><u id='wqezr'></u><kbd id='wqezr'><kbd id='wqezr'></kbd></kbd>
      2. <dl id='wqezr'></dl>

          <span id='wqezr'></span>
        1. Linux下的sed命令使用详解

          • 时间:
          • 浏览:3
          • 来源:124软件资讯网

              sed是stream editor的简称 ,也就是流编辑器  。它一次处置惩罚一行内容  ,处置惩罚时 ,把当前处置惩罚的行存储在暂时缓冲区中  ,称为“模式空间”pattern space  ,接着用sed下令处置惩罚缓冲区中的内容  ,处置惩罚完成后 ,把缓冲区的内容送往屏幕 。接着处置惩罚下一行  ,这样不停重复  ,直到文件末尾  。文件内容并没有 改变  ,除非你使用重定向存储输出  。

              使用语法

              sed下令的使用规则是这样的:

              复制代码

              代码如下:

              sed [option] 'command' input_file

              其中option是可选的  ,常用的option有如下几种:

              -n 使用平静silent模式(想不通为什么不是-s)  。在一样平常sed的用法中 ,所有来自stdin的内容一样平常都市被列出到屏幕上 。但若是加上-n参数后  ,则只有经由sed特殊处置惩罚的那一行(或者行动)才会被列出来;

              -e 直接在指令列模式上举行 sed 的行动编辑;

              -f 直接将 sed 的行动写在一个文件内  , -f filename 则可以执行filename内的sed下令;

              -r 让sed下令支持扩展的正则表达式(默认是基础正则表达式);

              -i 直接修改读取的文件内容  ,而不是由屏幕输出  。

              常用的下令有以下几种:

              a \:追加行append  , a \的后面跟上字符串s(多行字符串可以用\n分开) ,则会在当前选择的行的后面都加上字符串s;

              c \:取代/替换行change  ,c \后面跟上字符串s(多行字符串可以用\n分开) ,则会将当前选中的行替换成字符串s;

              i \:插入行insert ,i \后面跟上字符串s(多行字符串可以用\n分开)  ,则会在当前选中的行的前面都插入字符串s;

              d:删除行delete  ,该下令会将当前选中的行删除;

              p:打印print  ,该下令会打印当前选择的行到屏幕上;

              s:替换字符串subs  ,通常s下令的用法是这样的:1,2s/old/new/g  ,将old字符串替换成new字符串

              下令示例

              假设有一个当地文件test.txt  ,文件内容如下:

              复制代码

              代码如下:

              [qifuguang@winwill~]$ cat test.txt

              this is first line

              this is second line

              this is third line

              this is fourth line

              this fifth line

              happy everyday

              end

              本节将使用该文件详细演示每一个下令的用法  。

              a下令(追加行)

              例一

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '1a \add one' test.txt

              this is first line

              add one

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              happy everyday

              end

              本例下令部门中的1表现第一行  ,同样的第二行写成2  ,第一行到第三行写成1,3  ,用$表现最后一行  ,好比2,$表现第二行到最后一行中心所有的行(包罗第二行和最后一行) 。

              本例的作用是在第一行之后增添字符串”add one”  ,从输出可以看到详细效果  。

              例二

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '1,$a \add one' test.txt

              this is first line

              add one

              this is second line

              add one

              this is third line

              add one

              this is fourth line

              add one

              this is fifth line

              add one

              happy everyday

              add one

              end

              add one

              本例表现在第一行和最后一行所有的行后面都加上”add one”字符串  ,从输出可以看到效果  。

              例三

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '/first/a \add one' test.txt

              this is first line

              add one

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              happy everyday

              end

              本例表现在包罗”first”字符串的行的后面加上字符串”add one”  ,从输出可以看到第一行包罗first  ,以是第一行之后增添了”add one”

              例四

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '/^ha.*day$/a \add one' test.txt

              this is first line

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              happy everyday

              add one

              end

              本例使用正则表达式匹配行  ,^ha.*day$表现以ha开头 ,以day末端的行 ,则可以匹配到文件的”happy everyday”这样  ,以是在该行后面增添了”add one”字符串 。

              i下令(插入行)

              i下令使用要领和a下令一样的  ,只不外是在匹配的行的前面插入字符串  ,以是直接将上面a下令的示例的a替换成i即可  ,在此就不烦琐了 。

              c下令(替换行)

              例五

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '$c \add one' test.txt

              this is first line

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              happy everyday

              add one

              本例表现将最后一行替换成字符串”add one”  ,从输出可以看到效果  。

              例六

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '4,$c \add one' test.txt

              this is first line

              this is second line

              this is third line

              add one

              本例将第四行到最后一行的内容替换成字符串”add one”  。

              例七

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '/^ha.*day$/c \replace line' test.txt

              this is first line

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              replace line

              end

              本例将以ha开头  ,以day末端的行替换成”replace line” 。

              d下令(删除行)

              例八

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '/^ha.*day$/d' test.txt

              this is first line

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              end

              本例删除以ha开头 ,以day末端的行  。

              例九

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '4,$d' test.txt

              this is first line

              this is second line

              this is third line

              本例删除第四行到最后一行中的内容 。

              p下令(打印行)

              例十

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed -n '4,$p' test.txt

              this is fourth line

              this is fifth line

              happy everyday

              end

              本例在屏幕上打印第四行到最后一行的内容  ,p下令一样平常和-n选项一起使用 。

              例十一

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed -n '/^ha.*day$/p' test.txt

              happy everyday

              本例打印以ha最先 ,以day末端的行 。

              s下令(替换字符串)

              现实运用中s下令式最常使用到的  。

              例十二

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed 's/line/text/g' test.txt

              this is first text

              this is second text

              this is third text

              this is fourth text

              this is fifth text

              happy everyday

              end

              本例将文件中的所有line替换成text  ,最后的g是global的意思  ,也就是全局替换  ,若是不加g  ,则只会替换本行的第一个line  。

              例十三

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed '/^ha.*day$/s/happy/very happy/g' test.txt

              this is first line

              this is second line

              this is third line

              this is fourth line

              this is fifth line

              very happy everyday

              end

              本例首先匹配以ha最先  ,以day末端的行  ,本例中匹配到的行是”happy everyday”这样  ,然后再将该行中的happy替换成very happy  。

              例十四

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed 's/\(.*\)line$/\1/g' test.txt

              this is first

              this is second

              this is third

              this is fourth

              this is fifth

              happy everyday

              end

              这个例子有点庞大  ,先剖析一下  。首先s下令的模式是s/old/new/g这样的  ,以是本例的old部门即\(.*\)line$ ,sed下令中使用\(\)包裹的内容表现正则表达式的第n部门 ,序号从1最先盘算  ,本例中只有一个\(\)以是\(.*\)表现正则表达式的第一部门  ,这部门匹配恣意字符串  ,以是\(.*\)line$匹配的就是以line末端的任何行 。然后将匹配到的行替换成正则表达式的第一部门(本例中相当于删除line部门) ,使用\1表现匹配到的第一部门  ,同样\2表现第二部门  ,\3表现第三部门  ,可以依次这样引用 。好比下面的例子:

              复制代码

              代码如下:

              [qifuguang@winwill~]$ sed 's/\(.*\)is\(.*\)line/\1\2/g' test.txt

              this first

              this second

              this third

              this fourth

              this fifth

              happy everyday

              end

              正则表达式中is双方的部门可以用\1和\2表现  ,该例子的作用实在就是删除中心部门的is