前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux-sed文本处理流编辑器

Linux-sed文本处理流编辑器

作者头像
小小工匠
发布2021-08-16 10:59:50
5880
发布2021-08-16 10:59:50
举报
文章被收录于专栏:小工匠聊架构

概述

Linux sed命令是利用script来处理文本文件。

sed可依照script的指令,来处理、编辑文本文件。

Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。


语法

代码语言:javascript
复制
sed [-hnV][-e</span>][<span class="hljs-link_label">-f<script文件></span>][<span class="hljs-link_reference">文本文件</span>]</code></pre> 
<h2 id="参数说明">参数说明:</h2> 
<ul><li>-e<code><script></code>或–expression=<code><script></code> 以选项中指定的script来处理输入的文本文件。</li><li>-f<code><script文件></code>或–file<code>=<script文件></code> 以选项中指定的script文件来处理输入的文本文件。</li><li>-h或–help 显示帮助。</li><li>-n或–quiet或–silent 仅显示script处理后的结果。</li><li>-V或–version 显示版本信息。</li></ul> 
<h2 id="动作说明">动作说明:</h2> 
<ul><li>a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~</li><li>c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!</li><li>d :删除,因为是删除,所以 d 后面通常不接任何内容;</li><li>i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);</li><li>p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~</li><li>s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是了!</li></ul> 
<hr> 
<h1 id="栗子">栗子</h1> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># cat sedTest.txt </span>
xiao gong  jiang1 
xiao gong  jiang2 
xiao gong  jiang3 
xiao gong  jiang4 
xiao gong  jiang5 
xiao gong  jiang6 
xiao gong  jiang7 
xiao gong  jiang8 
xiao gong  jiang9 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang11 
xiao gong  jiang12 
xiao gong  jiang13 
xiao gong  jiang14 
xiao gong  jiang15 </code></pre> 
<p>以下例子中的数据均已上述sedTest.txt为准</p> 
<h2 id="在文件的第四行后添加一行并将结果输出到标准输出">在文件的第四行后添加一行,并将结果输出到标准输出</h2> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># sed -e 4a\Line4 sedTest.txt </span>
xiao gong  jiang1 
xiao gong  jiang2 
xiao gong  jiang3 
xiao gong  jiang4 
<span class="hljs-constant">Line4</span>
xiao gong  jiang5 
xiao gong  jiang6 
xiao gong  jiang7 
xiao gong  jiang8 
xiao gong  jiang9 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang11 
xiao gong  jiang12 
xiao gong  jiang13 
xiao gong  jiang14 
xiao gong  jiang15 </code></pre> 
<p>并不会修改源文件</p> 
<hr> 
<h2 id="以行为单位的新增删除">以行为单位的新增/删除</h2> 
<h3 id="删除第二行到第五行">删除第二行到第五行</h3> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># cat -b sedTest.txt | sed  '2,5d'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang1<span class="hljs-number">0</span> 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 


[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt |sed '2,5d'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang1<span class="hljs-number">0</span> 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 </code></pre> 
<p>sed 的动作为 ‘2,5d’ ,那个 d 就是删除! <br> 因为 2-5 行给他删除了,所以显示的数据就没有 2-5 行罗~ </p> 
<p>另外,注意一下,原本应该是要下达 sed -e 才对,没有 -e 也可以!</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed -e '2,9d'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
    <span class="hljs-number">10</span>  xiao gong  jiang1<span class="hljs-number">0</span> 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 </code></pre> 
<p>同时也要注意的是, sed 后面接的动作,推荐使用 ” 两个单引号括住!</p> 
<h3 id="只删除某一行">只删除某一行</h3> 
<p>比如第二行</p> 
<pre class="prettyprint"><code class=" hljs ruby"> [root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed '2d'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
     <span class="hljs-number">3</span>  xiao gong  jiang3 
     <span class="hljs-number">4</span>  xiao gong  jiang4 
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang1<span class="hljs-number">0</span> 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15</code></pre> 
<h3 id="删除第-3-到最后一行">删除第 3 到最后一行</h3> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed -e '3,$d'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
     <span class="hljs-number">2</span>  xiao gong  jiang2 </code></pre> 
<p>$ 标识最后一行</p> 
<h3 id="在第二行后亦即是加在第三行增加内容">在第二行后(亦即是加在第三行)增加内容</h3> 
<pre class="prettyprint"><code class=" hljs coffeescript">[root<span class="hljs-property">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed '2a this is added by sed'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
     <span class="hljs-number">2</span>  xiao gong  jiang2 
<span class="hljs-keyword">this</span> <span class="hljs-keyword">is</span> added <span class="hljs-keyword">by</span> sed
     <span class="hljs-number">3</span>  xiao gong  jiang3 
     <span class="hljs-number">4</span>  xiao gong  jiang4 
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang10 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 </code></pre> 
<h3 id="在第二行前亦即是加在第二行增加内容">在第二行前(亦即是加在第二行)增加内容</h3> 
<pre class="prettyprint"><code class=" hljs coffeescript">[root<span class="hljs-property">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed '2i this is added by sed'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
<span class="hljs-keyword">this</span> <span class="hljs-keyword">is</span> added <span class="hljs-keyword">by</span> sed
     <span class="hljs-number">2</span>  xiao gong  jiang2 
     <span class="hljs-number">3</span>  xiao gong  jiang3 
     <span class="hljs-number">4</span>  xiao gong  jiang4 
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang10 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 </code></pre> 
<h3 id="增加两行以上在第二行后面加入两行字">增加两行以上,在第二行后面加入两行字</h3> 
<pre class="prettyprint"><code class=" hljs coffeescript">[root<span class="hljs-property">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed '2i this is added by sed \n and I am the sencond line '</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
<span class="hljs-keyword">this</span> <span class="hljs-keyword">is</span> added <span class="hljs-keyword">by</span> sed 
 <span class="hljs-keyword">and</span> I am the sencond line 
     <span class="hljs-number">2</span>  xiao gong  jiang2 
     <span class="hljs-number">3</span>  xiao gong  jiang3 
     <span class="hljs-number">4</span>  xiao gong  jiang4 
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang10 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15</code></pre> 
<p>或者</p> 
<pre class="prettyprint"><code class=" hljs vbnet">[root@entel2 ~]<span class="hljs-preprocessor"># nl sedTest.txt | sed '2a run or \</span>
> walk <span class="hljs-comment">'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
     <span class="hljs-number">2</span>  xiao gong  jiang2 
run <span class="hljs-keyword">or</span> 
walk 
     <span class="hljs-number">3</span>  xiao gong  jiang3 
     <span class="hljs-number">4</span>  xiao gong  jiang4 
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang10 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 </code></pre> 
<p>每一行之间都必须要以反斜杠『 \ 』来进行新行的添加。</p> 
<hr> 
<h2 id="以行为单位的替换与显示">以行为单位的替换与显示</h2> 
<h3 id="将第2-5行的内容取代成为a">将第2-5行的内容取代成为『a』</h3> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt |sed  '2,5c a'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
a
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang1<span class="hljs-number">0</span> 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 
[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt |sed -e '2,5c a'</span>
     <span class="hljs-number">1</span>  xiao gong  jiang1 
a
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 
    <span class="hljs-number">10</span>  xiao gong  jiang1<span class="hljs-number">0</span> 
    <span class="hljs-number">11</span>  xiao gong  jiang11 
    <span class="hljs-number">12</span>  xiao gong  jiang12 
    <span class="hljs-number">13</span>  xiao gong  jiang13 
    <span class="hljs-number">14</span>  xiao gong  jiang14 
    <span class="hljs-number">15</span>  xiao gong  jiang15 </code></pre> 
<p>通过这个方法可以取代整行。</p> 
<h3 id="仅列出文件内的第-5-7-行">仅列出文件内的第 5-7 行</h3> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt | sed -n '5,7p'</span>
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 </code></pre> 
<p>p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~</p> 
<p>-n或–quiet或–silent 仅显示script处理后的结果。如果不加 -n ,会把所有行和匹配行都输出。</p> 
<h2 id="数据的搜寻并显示">数据的搜寻并显示</h2> 
<p>搜索jiang1关键字的行</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># sed  -n '/jiang1/p' sedTest.txt </span>
xiao gong  jiang1 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang11 
xiao gong  jiang12 
xiao gong  jiang13 
xiao gong  jiang14 
xiao gong  jiang15 </code></pre> 
<p><strong>关键字需要用 /关键字/</strong></p> 
<p>p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~</p> 
<p>如果jiang1找到,除了输出所有行,还会输出匹配行。 <br> 使用-n的时候将只打印包含模板的行。</p> 
<p>如果不指定 -n ,如下:</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># sed '/jiang1/p' sedTest.txt </span>
xiao gong  jiang1 
xiao gong  jiang1 
xiao gong  jiang2 
xiao gong  jiang3 
xiao gong  jiang4 
xiao gong  jiang5 
xiao gong  jiang6 
xiao gong  jiang7 
xiao gong  jiang8 
xiao gong  jiang9 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang11 
xiao gong  jiang11 
xiao gong  jiang12 
xiao gong  jiang12 
xiao gong  jiang13 
xiao gong  jiang13 
xiao gong  jiang14 
xiao gong  jiang14 
xiao gong  jiang15 
xiao gong  jiang15 </code></pre> 
<hr> 
<h2 id="数据的搜寻并删除">数据的搜寻并删除</h2> 
<p>删除所有包含jiang1的行,其他行输出</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl sedTest.txt|sed '/jiang1/d'  </span>
     <span class="hljs-number">2</span>  xiao gong  jiang2 
     <span class="hljs-number">3</span>  xiao gong  jiang3 
     <span class="hljs-number">4</span>  xiao gong  jiang4 
     <span class="hljs-number">5</span>  xiao gong  jiang5 
     <span class="hljs-number">6</span>  xiao gong  jiang6 
     <span class="hljs-number">7</span>  xiao gong  jiang7 
     <span class="hljs-number">8</span>  xiao gong  jiang8 
     <span class="hljs-number">9</span>  xiao gong  jiang9 </code></pre> 
<hr> 
<h2 id="数据的搜寻并执行命令">数据的搜寻并执行命令</h2> 
<p>改造下数据:</p> 
<p>将/etc/passwd root开头的打印出来 追加到 sedTest.txt文本中。</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># sed -n '/^root/p' /etc/passwd >> sedTest.txt </span>
[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># cat sedTest.txt </span>
xiao gong  jiang1 
xiao gong  jiang2 
xiao gong  jiang3 
xiao gong  jiang4 
xiao gong  jiang5 
xiao gong  jiang6 
xiao gong  jiang7 
xiao gong  jiang8 
xiao gong  jiang9 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang11 
xiao gong  jiang12 
xiao gong  jiang13 
xiao gong  jiang14 
xiao gong  jiang15 
<span class="hljs-symbol">root:</span><span class="hljs-symbol">x:</span><span class="hljs-number">0</span><span class="hljs-symbol">:</span><span class="hljs-number">0</span><span class="hljs-symbol">:root</span><span class="hljs-symbol">:/root</span><span class="hljs-symbol">:/bin/bash</span></code></pre> 
<p>把 bash 改成 xiaogongjiang </p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># sed -n '/root/{s/bash/xiaogongjiang/;p}' sedTest.txt </span>
<span class="hljs-symbol">root:</span><span class="hljs-symbol">x:</span><span class="hljs-number">0</span><span class="hljs-symbol">:</span><span class="hljs-number">0</span><span class="hljs-symbol">:root</span><span class="hljs-symbol">:/root</span><span class="hljs-symbol">:/bin/xiaogongjiang</span></code></pre> 
<h2 id="数据的搜寻并替换">数据的搜寻并替换</h2> 
<p>除了整行的处理模式之外, sed 还可以用行为单位进行部分数据的搜寻并取代。基本上 sed 的搜寻与替代的与 vi 相当的类似!他有点像这样:</p> 
<pre class="prettyprint"><code class=" hljs bash">sed <span class="hljs-string">'s/要被取代的字串/新的字串/g'</span></code></pre> 
<p>字符g代表每行出现的字符全部替换,如果想在特定字符处添加,g就有用了,否则只会替换每行第一个,而不继续往后找了.</p> 
<p><img src="https://img-blog.csdn.net/20160923231228114" alt="这里写图片描述" title=""></p> 
<h3 id="栗子-1">栗子</h3> 
<p>获取etho0的网址信息</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># ifconfig eth0 | grep "inet addr"</span>
          inet <span class="hljs-symbol">addr:</span><span class="hljs-number">10.45</span>.<span class="hljs-number">7.122</span>  <span class="hljs-constant">Bcast</span><span class="hljs-symbol">:</span><span class="hljs-number">10.45</span>.<span class="hljs-number">17.255</span>  <span class="hljs-constant">Mask</span><span class="hljs-symbol">:</span><span class="hljs-number">255.255</span>.<span class="hljs-number">252.0</span></code></pre> 
<p>利用正则去掉ip前面的部分</p> 
<pre class="prettyprint"><code class=" hljs ruleslanguage">[root@entel2 ~]<span class="hljs-array"># ifconfig eth</span>0 | grep <span class="hljs-string">"inet addr"</span> | sed <span class="hljs-string">'s/^.*addr://g'</span>
<span class="hljs-number">10.45</span><span class="hljs-number">.7</span><span class="hljs-number">.122</span>  Bcast:<span class="hljs-number">10.45</span><span class="hljs-number">.17</span><span class="hljs-number">.255</span>  Mask:<span class="hljs-number">255.255</span><span class="hljs-number">.252</span><span class="hljs-number">.0</span></code></pre> 
<p>去掉ip后面部分</p> 
<pre class="prettyprint"><code class=" hljs ruleslanguage">[root@entel2 ~]<span class="hljs-array"># ifconfig eth</span>0 | grep <span class="hljs-string">"inet addr"</span> | sed <span class="hljs-string">'s/^.*addr://g'</span> | sed <span class="hljs-string">'s/Bcast.*$//g'</span>
<span class="hljs-number">10.45</span><span class="hljs-number">.7</span><span class="hljs-number">.122</span>  </code></pre> 
<p>讲解:</p> 
<pre class="prettyprint"><code class=" hljs ruby">^ 匹配行首 例如 ^hello 会匹配以hello开头的行
. 匹配除了换行符外任意一个字符
* 前一个字符匹配<span class="hljs-number">0</span>次或任意多次
<span class="hljs-variable">$ </span>匹配行尾 例如 hello<span class="hljs-variable">$ </span>会匹配以hello结尾的行</code></pre> 
<pre class="prettyprint"><code class=" hljs "></code></pre> 
<h2 id="多点编辑">多点编辑</h2> 
<p>一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell</p> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/g'</span>
     <span class="hljs-number">1</span>  <span class="hljs-symbol">root:</span><span class="hljs-symbol">x:</span><span class="hljs-number">0</span><span class="hljs-symbol">:</span><span class="hljs-number">0</span><span class="hljs-symbol">:root</span><span class="hljs-symbol">:/root</span><span class="hljs-symbol">:/bin/blueshell</span>
     <span class="hljs-number">2</span>  <span class="hljs-symbol">bin:</span><span class="hljs-symbol">x:</span><span class="hljs-number">1</span><span class="hljs-symbol">:</span><span class="hljs-number">1</span><span class="hljs-symbol">:bin</span><span class="hljs-symbol">:/bin</span><span class="hljs-symbol">:/sbin/nologin</span></code></pre> 
<p>-e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。</p> 
<hr> 
<h2 id="直接修改文件内容危险动作">直接修改文件内容(危险动作)</h2> 
<p>sed 可以直接修改文件的内容,不必使用管道命令或数据流重导向! 不过,由於这个动作会直接修改到原始的文件,所以请你千万不要随便拿系统配置来测试!</p> 
<p>我们还是使用我们的 sedTest.txt来测试吧</p> 
<h3 id="利用-sed-直接在-sedtesttxt-最后一行加入-this-is-a-test">利用 sed 直接在 sedTest.txt 最后一行加入『# This is a test』</h3> 
<pre class="prettyprint"><code class=" hljs ruby">[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># sed -i '$a This is for test '  sedTest.txt </span>
[root<span class="hljs-variable">@entel2</span> ~]<span class="hljs-comment"># cat sedTest.txt </span>
xiao gong  jiang1 
xiao gong  jiang2 
xiao gong  jiang3 
xiao gong  jiang4 
xiao gong  jiang5 
xiao gong  jiang6 
xiao gong  jiang7 
xiao gong  jiang8 
xiao gong  jiang9 
xiao gong  jiang1<span class="hljs-number">0</span> 
xiao gong  jiang11 
xiao gong  jiang12 
xiao gong  jiang13 
xiao gong  jiang14 
xiao gong  jiang15 
<span class="hljs-symbol">root:</span><span class="hljs-symbol">x:</span><span class="hljs-number">0</span><span class="hljs-symbol">:</span><span class="hljs-number">0</span><span class="hljs-symbol">:root</span><span class="hljs-symbol">:/root</span><span class="hljs-symbol">:/bin/bash</span>
<span class="hljs-constant">This</span> is <span class="hljs-keyword">for</span> test </code></pre> 
<p>由於 $ 代表的是最后一行,而 a 的动作是新增,因此该文件最后新增『# This is a test』!</p> 
<h3 id="每一行结尾若为-则换成">每一行结尾若为 . 则换成 !</h3> 
<pre class="prettyprint"><code class=" hljs tex">sed -i 's/<span class="hljs-command">\.</span><span class="hljs-formula">$/<span class="hljs-command">\!</span>/g' regular_express.txt</span></code></pre> 
<h3 id="在每行的头添加字符比如head">在每行的头添加字符,比如”HEAD”</h3> 
<pre class="prettyprint"><code class=" hljs livecodeserver">sed <span class="hljs-string">'s/^/HEAD&/g'</span> test.<span class="hljs-built_in">file</span></code></pre> 
<h3 id="在每行的行尾添加字符比如tail">在每行的行尾添加字符,比如“TAIL”</h3> 
<pre class="prettyprint"><code class=" hljs livecodeserver">sed <span class="hljs-string">'s/$/&TAIL/g'</span> test.<span class="hljs-built_in">file</span></code></pre> 
<p>如果想导出文件,就利用重定向;如果想在原文件上更改,添加选项”-i”。</p> 
<p>sed 的『 -i 』选项可以直接修改文件内容,这功能非常有帮助!举例来说,如果你有一个 100 万行的文件,你要在第 100 行加某些文字,此时使用 vim 可能会疯掉!因为文件太大了!那怎办?就利用 sed 啊!透过 sed 直接修改/取代的功能,你甚至不需要使用 vim 去修订!</p>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/09/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 语法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档