Loading... <h2 style="margin: 13px 0px 0px;text-align: center"><strong>Sed<span style="font-family: 宋体">简介</span></strong></h2> <p style="margin: 3px 0px 0px"><span style="font-family: Calibri;font-size: 10px"> </span></p> <p style="margin: 0px 0px 8px"><span style="font-family: Calibri;font-size: 10px"> </span><span style="font-family: 宋体">一、简介</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> sed</span><span style="font-family: 宋体">全称是:</span><span style="font-family: Calibri">Stream EDitor</span><span style="font-family: 宋体">。</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">命令的功能同awk</span><span style="font-family: 宋体">类似,差别在于,</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">简单,对列处理的功能要差一些,</span><span style="font-family: Calibri">awk</span><span style="font-family: 宋体">的功能复杂,对列处理的功能比较强大。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> sed </span><span style="font-family: 宋体">是一种在线编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(</span><span style="font-family: Calibri">pattern space</span><span style="font-family: 宋体">),接着用</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有</span> <span style="font-family: 宋体">改变,除非你使用重定向存储输出。</span><span style="font-family: Calibri">Sed</span><span style="font-family: 宋体">主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。</span> </p> <p style="margin: 0px 0px 13px"><span style="font-family: 宋体">二、</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">语法格式</span></p> <p><span style="font-family: Calibri"> </span><span style="font-family: 宋体">sed [options] 'command' <span style="color:#0000ff">file</span>(s)</span></p> <p style="margin: auto 0px"><span style="font-family: 宋体"> sed [options] -f scriptfile file(s)</span></p> <h2 style="margin: 13px 0px 0px"><span style="font-family: 宋体">三、命令与选项</span></h2> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> sed</span><span style="font-family: 宋体">命令告诉</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。</span></p> <h3 style="margin: 13px 0px 0px"> 1<span style="font-family: 宋体">、</span> sed<span style="font-family: 宋体">命令</span></h3> <table width="500" cellspacing="0" cellpadding="0"> <tbody> <tr class="firstRow"> <td width="56" style="padding: 3px;border: 1px solid silver;background-color: transparent"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">命令</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">功能</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> a\</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用</span><span style="font-family: Calibri">“\”</span><span style="font-family: 宋体">续行</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> c\</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每行末尾需用</span><span style="font-family: Calibri">"\"</span><span style="font-family: 宋体">续行</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> i\</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">在当前行之前插入文本。多行时除最后一行外,每行末尾需用</span><span style="font-family: Calibri">"\"</span><span style="font-family: 宋体">续行</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> d</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">删除行</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> h</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">把模式空间里的内容复制到暂存缓冲区</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> H</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">把模式空间里的内容追加到暂存缓冲区</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> g</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> G</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> l</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">列出非打印字符</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> p</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">打印行</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> n</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> q</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">结束或退出</span><span style="font-family: Calibri">sed</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> r</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">从文件中读取输入行</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> !</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">对所选行以外的所有行应用命令</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> s</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">用一个字符串替换另一个</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> g</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">在行内进行全局替换</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> w</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">将所选的行写入文件</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> x</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">交换暂存缓冲区与模式空间的内容</span></p> </td> </tr> <tr> <td width="56"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> y</span></p> </td> <td width="444"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">将字符替换为另一字符(不能对正则表达式使用</span><span style="font-family: Calibri">y</span><span style="font-family: 宋体">命令)</span></p> </td> </tr> </tbody> </table> <p style="margin: 0px 0px 13px"><strong><span style="font-family: Calibri"> </span></strong></p> <h3 style="margin: 13px 0px 0px">2<span style="font-family: 宋体">、</span> sed<span style="font-family: 宋体">选项</span></h3> <table width="500" cellspacing="0" cellpadding="0"> <tbody> <tr class="firstRow"> <td style="padding: 3px;border: 1px solid silver;background-color: transparent"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">选项</span></p> </td> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">功能</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> -e</span></p> </td> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">进行多项编辑,即对输入行应用多条</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">命令时使用</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> -n</span></p> </td> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">取消默认的输出</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> -f</span></p> </td> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">指定</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">脚本的文件名</span></p> </td> </tr> </tbody> </table> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span></p> <h2 style="margin: 13px 0px 0px"><span style="font-family: 宋体">四、正则表达式元字符</span></h2> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">与</span><span style="font-family: Calibri">grep</span><span style="font-family: 宋体">一样,</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">也支持特殊元字符,来进行模式查找、替换。不同的是,</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">使用的正则表达式是括在斜杠线</span><span style="font-family: Calibri">"/"</span><span style="font-family: 宋体">之间的模式。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">如果要把正则表达式分隔符</span><span style="font-family: Calibri">"/"</span><span style="font-family: 宋体">改为另一个字符,比如</span><span style="font-family: Calibri">o</span><span style="font-family: 宋体">,只要在这个字符前加一个反斜线,在字符后跟上正则表达式,再跟上这个字符即可。例如:</span><span style="font-family: Calibri">sed -n '\o^Myop' datafile </span></p> <table width="954" style="width: 815px" cellspacing="0" cellpadding="0"> <tbody> <tr class="firstRow"> <td style="padding: 3px;border: 1px solid silver;background-color: transparent"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">元字符</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">功能</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">示例</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> ^</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">行首定位符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /^my/ </span><span style="font-family: 宋体">匹配所有以</span><span style="font-family: Calibri">my</span><span style="font-family: 宋体">开头的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">行尾定位符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /my$/ </span><span style="font-family: 宋体">匹配所有以</span><span style="font-family: Calibri">my</span><span style="font-family: 宋体">结尾的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> .</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">匹配除换行符以外的单个字符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /m..y/ </span><span style="font-family: 宋体">匹配包含字母</span><span style="font-family: Calibri">m</span><span style="font-family: 宋体">,后跟两个任意字符,再跟字母</span><span style="font-family: Calibri">y</span><span style="font-family: 宋体">的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> *</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">匹配零个或多个前导字符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /my*/ </span><span style="font-family: 宋体">匹配包含字母</span><span style="font-family: Calibri">m,</span><span style="font-family: 宋体">后跟零个或多个</span><span style="font-family: Calibri">y</span><span style="font-family: 宋体">字母的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> []</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">匹配指定字符组内的任一字符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /[Mm]y/ </span><span style="font-family: 宋体">匹配包含</span><span style="font-family: Calibri">My</span><span style="font-family: 宋体">或</span><span style="font-family: Calibri">my</span><span style="font-family: 宋体">的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> [^]</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">匹配不在指定字符组内的任一字符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /[^Mm]y/ </span><span style="font-family: 宋体">匹配包含</span><span style="font-family: Calibri">y</span><span style="font-family: 宋体">,但</span><span style="font-family: Calibri">y</span><span style="font-family: 宋体">之前的那个字符不是</span><span style="font-family: Calibri">M</span><span style="font-family: 宋体">或</span><span style="font-family: Calibri">m</span><span style="font-family: 宋体">的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> \(..\)</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">保存已匹配的字符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> 1,20s/\(you\)self/\1r/ </span><span style="font-family: 宋体">标记元字符之间的模式,并将其保存为标签</span><span style="font-family: Calibri">1</span><span style="font-family: 宋体">,之后可以使用</span><span style="font-family: Calibri">\1</span><span style="font-family: 宋体">来引用它。最多可以定义</span><span style="font-family: Calibri">9</span><span style="font-family: 宋体">个标签,从左边开始编号,最左边的是第一个。此例中,对第</span><span style="font-family: Calibri">1</span><span style="font-family: 宋体">到第</span><span style="font-family: Calibri">20</span><span style="font-family: 宋体">行进行处理,</span><span style="font-family: Calibri">you</span><span style="font-family: 宋体">被保存为标签</span><span style="font-family: Calibri">1</span><span style="font-family: 宋体">,如果发现</span><span style="font-family: Calibri">youself</span><span style="font-family: 宋体">,则替换为</span><span style="font-family: Calibri">your</span><span style="font-family: 宋体">。</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> &</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">保存查找串以便在替换串中引用</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> s/my/**&**/ </span><span style="font-family: 宋体">符号</span><span style="font-family: Calibri">&</span><span style="font-family: 宋体">代表查找串。</span><span style="font-family: Calibri">my</span><span style="font-family: 宋体">将被替换为</span><span style="font-family: Calibri">**my**</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> \<</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">词首定位符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /\<my/ </span><span style="font-family: 宋体">匹配包含以</span><span style="font-family: Calibri">my</span><span style="font-family: 宋体">开头的单词的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> \></span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">词尾定位符</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /my\>/ </span><span style="font-family: 宋体">匹配包含以</span><span style="font-family: Calibri">my</span><span style="font-family: 宋体">结尾的单词的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> x\{m\}</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">连续</span><span style="font-family: Calibri">m</span><span style="font-family: 宋体">个</span><span style="font-family: Calibri">x</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /9\{5\}/ </span><span style="font-family: 宋体">匹配包含连续</span><span style="font-family: Calibri">5</span><span style="font-family: 宋体">个</span><span style="font-family: Calibri">9</span><span style="font-family: 宋体">的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> x\{m,\}</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">至少</span><span style="font-family: Calibri">m</span><span style="font-family: 宋体">个</span><span style="font-family: Calibri">x</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /9\{5,\}/ </span><span style="font-family: 宋体">匹配包含至少连续</span><span style="font-family: Calibri">5</span><span style="font-family: 宋体">个</span><span style="font-family: Calibri">9</span><span style="font-family: 宋体">的行</span></p> </td> </tr> <tr> <td> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> x\{m,n\}</span></p> </td> <td width="313"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="font-family: 宋体">至少</span><span style="font-family: Calibri">m</span><span style="font-family: 宋体">个,但不超过</span><span style="font-family: Calibri">n</span><span style="font-family: 宋体">个</span><span style="font-family: Calibri">x</span></p> </td> <td width="375"> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> /9\{5,7\}/ </span><span style="font-family: 宋体">匹配包含连续</span><span style="font-family: Calibri">5</span><span style="font-family: 宋体">到</span><span style="font-family: Calibri">7</span><span style="font-family: 宋体">个</span><span style="font-family: Calibri">9</span><span style="font-family: 宋体">的行</span></p> </td> </tr> </tbody> </table> <p style="background: white;margin: 0px 5px 13px 300px"> </p> <h2 style="margin: 13px 0px 0px"><span style="font-family: 宋体">五、实例分析</span></h2> <h3 style="margin: 13px 0px 0px">1<span style="font-family: 宋体">、删除:</span>d<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '2d' example—–</span><span style="font-family: 宋体">删除</span><span style="font-family: Calibri">example</span><span style="font-family: 宋体">文件的第二行。</span> <span style="color: red;font-family: 宋体">实例操作:</span><span style="color: red"><span style="font-family: Calibri">sed '2d' /etc/issue</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '2,$d' example—–</span><span style="font-family: 宋体">删除</span><span style="font-family: Calibri">example</span><span style="font-family: 宋体">文件的第二行到末尾所有行。<span style="color: red">实例操作</span>:</span><span style="color: red"><span style="font-family: Calibri">sed '2,$d' /etc/issue</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '$d' example—–</span><span style="font-family: 宋体">删除</span><span style="font-family: Calibri">example</span><span style="font-family: 宋体">文件的最后一行。<span style="color: red">实例操作:</span></span><span style="color: red"><span style="font-family: Calibri">sed '$d' /etc/issue</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '/</span>test<span style="font-family: Calibri">/'d example—–</span><span style="font-family: 宋体">删除</span><span style="font-family: Calibri">example</span><span style="font-family: 宋体">文件所有包含</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">的<span style="color: red">行</span>。<span style="color: red">实例操作:</span></span><span style="color: red"><span style="font-family: Calibri">sed '/Kernel/d' /etc/issue</span></span></p> <h3 style="margin: 13px 0px 0px">2<span style="font-family: 宋体">、替换:</span>s<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed 's/test/mytest/g' example—–</span><span style="font-family: 宋体">在整行范围内把</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">替换为</span><span style="font-family: Calibri">mytest</span><span style="font-family: 宋体">。如果没有</span><span style="font-family: Calibri">g</span><span style="font-family: 宋体">标记,则只有每行第一个匹配的</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">被替换成</span><span style="font-family: Calibri">mytest</span><span style="font-family: 宋体">。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">:sed 's/UUID/test/g' /etc/fstab</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">:sed 's/proc/test/' /etc/fstab </span></span><span style="color: red;font-family: 宋体">此处没有</span><span style="color: red"><span style="font-family: Calibri">g</span></span><span style="color: red;font-family: 宋体">标记,只替换每行一个匹配的</span><span style="color: red"><span style="font-family: Calibri">proc</span></span><span style="color: red;font-family: 宋体">为</span><span style="color: red"><span style="font-family: Calibri">test</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -n 's/^test/mytest/p' example—–(-n</span><span style="font-family: 宋体">)选项和</span><span style="font-family: Calibri">p</span><span style="font-family: 宋体">标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">被替换成</span><span style="font-family: Calibri">mytest</span><span style="font-family: 宋体">,就打印它。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">: sed -n 's/proc/test/p' /etc/fstab</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed 's/^192.168.0.1/&localhost/' example—–&</span><span style="font-family: 宋体">;符号表示替换换字符串中被找到的部份。所有以</span><span style="font-family: Calibri">192.168.0.1</span><span style="font-family: 宋体">开头的行都会被替换成它自已加</span><span style="font-family: Calibri">localhost</span><span style="font-family: 宋体">,变成</span><span style="font-family: Calibri">192.168.0.1localhost</span><span style="font-family: 宋体">。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">: sed 's/^UUID/&localhost/' /etc/sysconfig/network-scripts/ifcfg-eth0 :</span></span><span style="color: red;font-family: 宋体">将</span><span style="color: red"><span style="font-family: Calibri">UUID</span></span><span style="color: red;font-family: 宋体">替换为</span><span style="color: red"><span style="font-family: Calibri">UUIDlocalhost</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -n 's/\(love\)able/\1rs/p' example—–love</span><span style="font-family: 宋体">被标记为</span><span style="font-family: Calibri">1</span><span style="font-family: 宋体">,所有</span><span style="font-family: Calibri">loveable</span><span style="font-family: 宋体">会被替换成</span><span style="font-family: Calibri">lovers</span><span style="font-family: 宋体">,而且替换的行会被打印出来。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">:sed -n 's/\(Kernel\)/\1test/p' /etc/issue </span></span><span style="color: red;font-family: 宋体">此处将</span><span style="color: red"><span style="font-family: Calibri">Kernel</span></span><span style="color: red;font-family: 宋体">替换为</span><span style="color: red"><span style="font-family: Calibri">Kerneltest</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed 's#10#100#g' example—–</span><span style="font-family: 宋体">不论什么字符,紧跟着</span><span style="font-family: Calibri">s</span><span style="font-family: 宋体">命令的都被认为是新的</span><span style="font-family: 宋体">分隔符</span><span style="font-family: 宋体">,所以,</span><span style="font-family: Calibri">“#”</span><span style="font-family: 宋体">在这里是分隔符,代替了默认的</span><span style="font-family: Calibri">“/”</span><span style="font-family: 宋体">分隔符。表示把所有</span><span style="font-family: Calibri">10</span><span style="font-family: 宋体">替换成</span><span style="font-family: Calibri">100</span><span style="font-family: 宋体">。<span style="color: red">实例操作</span></span><span style="font-family: Calibri"><span style="color: red">: </span>sed 's#Kernel#1000Kernel#g' /etc/issue </span><span style="font-family: 宋体">将</span><span style="font-family: Calibri">kernel</span><span style="font-family: 宋体">替换为</span><span style="font-family: Calibri">1000kernel</span></p> <h3 style="margin: 13px 0px 0px">3<span style="font-family: 宋体">、选定行的范围:逗号</span>$ sed -n '/test/,/check/p' example—–<span style="font-family: 宋体">所有在模板</span>test<span style="font-family: 宋体">和</span>check<span style="font-family: 宋体">所确定的范围内的行都被打印。</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -n '5,/^test/p' example—–</span><span style="font-family: 宋体">打印从第五行开始到第一个包含以</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">开始的行之间的所有行。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">: sed -n '5,/^UUID/p' /etc/fstab</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '/test/,/check/s/$/sed test/' example—–</span><span style="font-family: 宋体">对于模板</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">和check</span><span style="font-family: 宋体">之间的行,每行的末尾用字符串</span><span style="font-family: Calibri">sed test</span><span style="font-family: 宋体">替换。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">: sed '/UUID/,/tmpfs/s/$/2015test/' /etc/fstab </span></span><span style="color: red;font-family: 宋体">将</span><span style="color: red"><span style="font-family: Calibri">UUID</span></span><span style="color: red;font-family: 宋体">和</span><span style="color: red"><span style="font-family: Calibri">tmpfs</span></span><span style="color: red;font-family: 宋体">之间的行,末尾加上</span><span style="color: red"><span style="font-family: Calibri">2015test</span></span></p> <h3 style="margin: 13px 0px 0px">4<span style="font-family: 宋体">、多点编辑:</span>e<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -e '1,5d' -e 's/test/check/' example—–(-e</span><span style="font-family: 宋体">)选项允许在同一行里执行多条命令。如例子所示,第一条命令删除</span><span style="font-family: Calibri">1</span><span style="font-family: 宋体">至</span><span style="font-family: Calibri">5</span><span style="font-family: 宋体">行,第二条命令用</span><span style="font-family: Calibri">check</span><span style="font-family: 宋体">替换</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">: sed -e '1,3d' -e 's/UUID/test/' /etc/fstab</span></span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed –expression='s/test/check/' –expression='/love/d' example—–</span><span style="font-family: 宋体">一个比</span><span style="font-family: Calibri">-e</span><span style="font-family: 宋体">更好的命令是</span><span style="font-family: Calibri">–expression</span><span style="font-family: 宋体">。它能给</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">表达式赋值。</span></p> <h3 style="margin: 13px 0px 0px">5<span style="font-family: 宋体">、从文件读入:</span>r<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '/test/r </span>file<span style="font-family: Calibri">' example—–file</span><span style="font-family: 宋体">里的内容被读进来,显示在与</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">匹配的行后面,如果匹配多行,则</span><span style="font-family: Calibri">file</span><span style="font-family: 宋体">的内容将显示在所有匹配行的下面。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">实例操作</span><span style="color: red"><span style="font-family: Calibri">: sed '/UUID/r /etc/issue' /etc/fstab</span></span></p> <h3 style="margin: 13px 0px 0px">6<span style="font-family: 宋体">、写入文件:</span>w<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -n '/test/w file' example—–</span><span style="font-family: 宋体">在</span><span style="font-family: Calibri">example</span><span style="font-family: 宋体">中所有包含</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">的行都被写入</span><span style="font-family: Calibri">file</span><span style="font-family: 宋体">里。</span></p> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> </span><span style="color: red;font-family: 宋体">此处文件</span><span style="color: red"><span style="font-family: Calibri">file</span></span><span style="color: red;font-family: 宋体">中的内容会被覆盖!!!</span></p> <h3 style="margin: 13px 0px 0px">7<span style="font-family: 宋体">、追加命令:</span>a<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '/^test/a\\—>this is a example' example<—–'this is a example'</span><span style="font-family: 宋体">被追加到以</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">开头的行后面,</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">要求命令</span><span style="font-family: Calibri">a</span><span style="font-family: 宋体">后面有一个</span><span style="font-family: 宋体">反斜杠</span><span style="font-family: 宋体">。</span></p> <h3 style="margin: 13px 0px 0px">8<span style="font-family: 宋体">、插入:</span>i<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '/test/i\\ new </span>line<span style="font-family: Calibri"> ————————-' example </span><span style="font-family: 宋体">如果</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">被匹配,则把反斜杠后面的文本插入到匹配行的前面。</span></p> <h3 style="margin: 13px 0px 0px">9<span style="font-family: 宋体">、下一个:</span>n<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '/test/{ n; s/</span>aa<span style="font-family: Calibri">/</span>bb<span style="font-family: Calibri">/; }' example—–</span><span style="font-family: 宋体">如果</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">被匹配,则移动到匹配行的下一行,替换这一行的</span><span style="font-family: Calibri">aa</span><span style="font-family: 宋体">,变为</span><span style="font-family: Calibri">bb</span><span style="font-family: 宋体">,并打印该行,然后继续。</span></p> <h3 style="margin: 13px 0px 0px">10<span style="font-family: 宋体">、变形:</span>y<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '1,10y/</span>abcde<span style="font-family: Calibri">/ABCDE/' example—–</span><span style="font-family: 宋体">把</span><span style="font-family: Calibri">1–10</span><span style="font-family: 宋体">行内所有</span><span style="font-family: Calibri">abcde</span><span style="font-family: 宋体">转变为大写,注意,</span><span style="font-family: 宋体">正则表达式</span><span style="font-family: 宋体">元字符</span><span style="font-family: 宋体">不能使用这个命令。</span></p> <h3 style="margin: 13px 0px 0px">11<span style="font-family: 宋体">、退出:</span>q<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed '10q' example—–</span><span style="font-family: 宋体">打印完</span><span style="font-family: Calibri">10</span><span style="font-family: 宋体">行后,退出</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">。</span></p> <h3 style="margin: 13px 0px 0px">12<span style="font-family: 宋体">、保持和获取:</span>h<span style="font-family: 宋体">命令和</span>G<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -e '/test/h' -e '$G' example—–</span><span style="font-family: 宋体">在</span><span style="font-family: Calibri">sed</span><span style="font-family: 宋体">处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。在这个例子里,匹配</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">的行被找到后,将存入模式空间,</span><span style="font-family: Calibri">h</span><span style="font-family: 宋体">命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,</span><span style="font-family: Calibri">G</span><span style="font-family: 宋体">命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现</span> <span style="font-family: 宋体">在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">的行都被复制并追加到该文件的末尾。</span></p> <h3 style="margin: 13px 0px 0px">13<span style="font-family: 宋体">、保持和互换:</span>h<span style="font-family: 宋体">命令和</span>x<span style="font-family: 宋体">命令</span></h3> <p style="margin: 0px 0px 13px"><span style="font-family: Calibri"> $ sed -e '/test/h' -e '/check/x' example —–</span><span style="font-family: 宋体">互换模式空间和保持缓冲区的内容。也就是把包含</span><span style="font-family: Calibri">test</span><span style="font-family: 宋体">与</span><span style="font-family: Calibri">check</span><span style="font-family: 宋体">的行互换。</span></p> 最后修改:2021 年 12 月 10 日 10 : 53 AM © 允许规范转载 赞赏 如果觉得我的文章对你有用,请随意赞赏 赞赏作者 支付宝微信