北京老夫 發表於 2023-12-26 00:00:00

linux中sed命令的使用与注意小结

<p>
        <strong>前言</strong></p>
<p>
        sed是一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。</p>
<p>
        <strong>sed的用法</strong></p>
<p>
        $ sed [-nefr] [动作]</p>
<p>
        <strong>参数:</strong></p>
<ul>
<li>
                -n : 使用安静模式。在一般sed用法中,所有来自STDIN的数据一般都会被列出到屏幕上。但如果加上-n参数后,则只有经过sed特殊处理的那一行(或者操作)才会被列出来。</li>
        <li>
                -e : 直接在命令行模式上进行sed的动作编辑。(默认)</li>
        <li>
                -f : 直接将sed的动作写在一个文件内, <code>-f filename</code>则可以执行filename内的sed动作。</li>
        <li>
                -r : sed的动作支持的是扩展型正则表达式的语法(默认是基础正则表达式语法)。</li>
        <li>
                -i : 直接修改读取的文件内容,而不是屏幕输出。</li>
</ul>
<p>
        默认情况下sed不直接作用于读取的文件中</p>
<p>
        动作说明: <code>] function</code></p>
<ul>
<li>
                n1,n2 : 不见得会存在,一般代表选择进行动作的行数,举例来说,如果我的动作是需要在10到20行之间进行的,则“10,20[动作行为]”。</li>
</ul>
<p>
        function 有下面的这些参数:</p>
<ul>
<li>
                a : 新增到下一行,后面可以接字符串</li>
        <li>
                c : 替换,后面可以接字符串</li>
        <li>
                d : 删除,后面不接热河参数</li>
        <li>
                i : 插入到上一行,后面可接字符串</li>
        <li>
                p : 打印,通常会与参数 sed -n 一起运行</li>
        <li>
                s : 查找并替换特定字符串,通常搭配正则表达式。</li>
</ul>
<p>
             例如,1,20s/old/new/g</p>
<p>
        <strong>演示</strong></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_904598">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">//</code><code class="bash plain">假设有text文件</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                         </div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash string">'2,5d'</code> <code class="bash plain">text </code><code class="bash comments">#将第2~5行删除</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash string">'2a hahaha'</code> <code class="bash plain">text </code><code class="bash comments">#在第二行后加上“hahaha”字样</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash plain">'2a hahaha\</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="bash plain">&gt; xixixi' text </code><code class="bash comments">#在第二行后加上两行字</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash string">'2,5c No 2-5 number'</code> <code class="bash plain">text </code><code class="bash comments">#将第2~5行的内容替换成为“No 2-5 number”,是整行替换</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash plain">-n </code><code class="bash string">'5,7p'</code> <code class="bash plain">text </code><code class="bash comments">#将5~7行打印出来,一定要加 -n</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash string">'s/hahaha/ssss/g'</code> <code class="bash plain">text </code><code class="bash comments">#将hahaha字段替换成ssss,这是部分数据的查找并替换</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        sed还可以和正则表达式配合使用</p>
<p>
        如:</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterbash" id="highlighter_319392">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="bash plain">$ </code><code class="bash functions">sed</code> <code class="bash string">'s/^h/ssss/g'</code> <code class="bash plain">text </code><code class="bash comments">#将h开头的字段替换成ssss</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>注意</strong></span></p>
<ol>
<li>
                sed后面接的动作,务必以两个单引号括住。</li>
        <li>
                使用p(打印)参数时,sed一定要用-n,否则所有的行都会被输出,这样就没有意义了。</li>
        <li>
                sed默认不直接作用于读取的文件中。</li>
        <li>
                -i参数要慎用,它会直接修改读取的文件内容。</li>
</ol>
<p>
        <strong>总结</strong></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:http://www.jianshu.com/p/4e3d6ea8fa9f</p>
頁: [1]
查看完整版本: linux中sed命令的使用与注意小结