天天看點

Linux之 sed工具使用

sed

    Stream EDitor 文本流編輯器, 行編輯器

sed工作方式 

<a href="https://s3.51cto.com/wyfs02/M01/06/42/wKiom1m1D9fhB8YHAABO5xoQ2AI293.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M01/06/42/wKiom1m1D0WT1cMGAAA4IbtEK8c252.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M01/A4/F3/wKioL1m1DyDhOOpgAAA6IpFSLLY774.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/06/42/wKiom1m1D0bz56khAAA5h7nf7gs984.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/A4/F3/wKioL1m1DyHjJ_PzAAA76jGBRSw451.png" target="_blank"></a>

sed基本使用

格式一:

1

2

3

4

5

6

7

8

<code>sed [OPTION ...] [SCRIPT] [FILE...]</code>

<code>多個檔案處理: 處理完一個,繼續處理第二個。</code>

<code>sed script file1 --&gt; sed script file2</code>

<code>使用方法基本同vim指令</code>

<code>1</code><code>)vim % --&gt; sed 不用指明</code>

<code>2</code><code>)vim @@ ## </code><code>// --&gt; sed || ,, @@ //</code>

<a href="https://s3.51cto.com/wyfs02/M02/06/42/wKiom1m1EIDDM-C0AABRJqCgFs8555.png" target="_blank"></a>

格式二:

<code>sed  </code><code>'位址定界command'</code>  <code>FILE ...</code>

1)位址定界

<a href="https://s5.51cto.com/wyfs02/M02/06/42/wKiom1m1EPGgG4GGAABTgPo45VY239.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M00/06/42/wKiom1m1FCmwPFsfAAAS-s6glds462.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M01/06/42/wKiom1m1FCnDz2VcAAAQ2l7GkpQ243.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/A4/F3/wKioL1m1FAWDyDsJAAAcT-2ncug884.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M01/06/42/wKiom1m1FCqxibc4AABIcFEtJng420.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M01/A4/F3/wKioL1m1FAWhqAulAAAmkPfBdCs908.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/06/42/wKiom1m1FCrj38PWAAAnjMB3nwk769.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M02/A4/F3/wKioL1m1FAaiH3SRAAAYpujmRoU388.png" target="_blank"></a>

2)command

<a href="https://s2.51cto.com/wyfs02/M01/06/42/wKiom1m1GxvgsRYDAAAjC3I5CMM740.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M01/A4/F3/wKioL1m1GvewFoHNAAAiT3zBrZs856.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M01/A4/F3/wKioL1m1GvezJgVpAAA_mwnwomE635.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M02/06/42/wKiom1m1GxyxqhKVAAA4VZHD39Q626.png" target="_blank"></a>

<a href="https://s4.51cto.com/wyfs02/M00/06/42/wKiom1m1GxyjuvelAAA3uTPTbEE163.png" target="_blank"></a>

<a href="https://s3.51cto.com/wyfs02/M02/A4/F3/wKioL1m1GvjCAFupAAAlIsCagqo525.png" target="_blank"></a>

<code>例如:</code>

<code>将檔案中的内容插入至指定檔案中</code>

<code># sed </code><code>'/^UUID/r /etc/issue'</code> <code>/etc/fstab</code>

<code># sed </code><code>'1,3r /etc/centos-release'</code> <code>/etc/issue</code>

<a href="https://s2.51cto.com/wyfs02/M00/A4/F3/wKioL1m1GvjB647jAAAb2YTbrgY507.png" target="_blank"></a>

<code>例如:</code>

<code>取一個檔案的基名、目錄名</code>

<code>基名: echo </code><code>"/etc/sysconfig/useradd/"</code> <code>| sed </code><code>'s,/$,,'</code> <code>| sed -r </code><code>'s|(.*/)([^/]+)|\2|'</code> 

<code>目錄名: echo </code><code>"/etc/sysconfig/useradd/"</code> <code>| sed </code><code>'s,/$,,'</code> <code>| sed -r </code><code>'s|(.*/)([^/]+)|\2|'</code>

<a href="https://s3.51cto.com/wyfs02/M01/A4/F3/wKioL1m1HQ3x8FguAAAJG1GB_hE836.png" target="_blank"></a>

<code># echo </code><code>"how are you"</code> <code>| sed -r </code><code>'s/(how)(.*)(you)/\3\2\1/'</code>

<code># echo </code><code>"how are you"</code> <code>| sed -r </code><code>'s@(how)(.*)(you)@\3\2\1@'</code>

<code># echo </code><code>"how are you"</code> <code>| sed -r </code><code>'s#(how)(.*)(you)#\3\2\1#'</code>

<code># echo </code><code>"how are you"</code> <code>| sed -r </code><code>'s,(how)(.*)(you),\3\2\1,'</code>

<code># echo </code><code>"how are you"</code> <code>| sed -r </code><code>'s|(how)(.*)(you)|\3\2\1|'</code>

<a href="https://s3.51cto.com/wyfs02/M02/A4/F3/wKioL1m1GvqBebULAACWfz2twec480.png" target="_blank"></a>

<a href="https://s1.51cto.com/wyfs02/M00/A4/F3/wKioL1m1HVKjQbayAAAOzJmq1tg687.png" target="_blank"></a>

<code>[root@localhost bin]</code><code># head -n 1 &lt; /etc/passwd | sed 's,root,ROOT,'</code>

<code>ROOT:x:0:0:root:</code><code>/root</code><code>:</code><code>/bin/bash</code>

<code>[root@localhost bin]</code><code># head -n 1 &lt; /etc/passwd | sed 's,root,ROOT,g'</code>

<code>ROOT:x:0:0:ROOT:</code><code>/ROOT</code><code>:</code><code>/bin/bash</code>

<a href="https://s3.51cto.com/wyfs02/M00/06/42/wKiom1m1HXfC4D7dAAAIwzsipb4173.png" target="_blank"></a>

<code>[root@localhost bin]</code><code># head -n 1 &lt; /etc/passwd | sed 's,rOOt,ROOT,i'</code>

<code>[root@localhost bin]</code><code># head -n 1 &lt; /etc/passwd | sed 's,rOOt,ROOT,gi'</code>

<a href="https://s3.51cto.com/wyfs02/M02/06/42/wKiom1m1HXjgf8xzAAAILz07z44835.png" target="_blank"></a>

<code>[root@localhost bin]</code><code># cat &lt; /etc/passwd | sed -n 's,rOOt,ROOT,ip'</code>

<code>operator:x:11:0:operator:</code><code>/ROOT</code><code>:</code><code>/sbin/nologin</code>

<a href="https://s3.51cto.com/wyfs02/M01/A4/F3/wKioL1m1HVOAfcKqAAAPbfJsYGQ821.png" target="_blank"></a>

<code># sed 's,,,w /PATH/TO/SOMEFILE' FILE</code>

<code># sed 's,,,' FILE &gt; /PTH/TO/SOMEFILE</code>

練習1:删除/boot/grub/grub.conf文本中所有以空白開頭的行行首的空白字元

練習2:删除/etc/fstab檔案中所有以#開頭,後面至少跟一個空白字元的行的行首的#和空白字元

練習3:echo 一個絕對路徑給sed指令:取出其基名,取出目錄名

<code>CentOS 6:</code>

<code>    </code><code># cp /boot/grub/grub.conf /tmp/grub.conf</code>

<code>    </code><code># sed -i 's,^[[:space:]]\+,,' /tmp/grub.conf</code>

<code>CentOS 7:</code>

<code>    </code><code># cp /etc/grub2.cfg /tmp/grub2.cfg</code>

<code>    </code><code># sed -i 's,^[[:space:]]\+,,' /tmp/grub2.cfg</code>

<code># cp /etc/fstab /tmp/a.file</code>

<code># sed -i -r 's|^#[[:space:]]+||' /tmp/a.file</code>

<code>擴充:删除以</code><code>#開頭,後面沒有跟空白字元的行的行首的#</code>

<code>    </code><code># cp /etc/fstab /tmp/fstab</code>

<code>    </code><code># echo "#hello sed" &gt;&gt; /tmp/fstab</code>

<code>    </code><code># sed -i -r 's@^#([^[:space:]].*)@\1@' /etc/fstab</code>

9

10

11

12

<code>測試取出檔案名中存在 useradd的絕對路徑</code>

<code>    </code><code># locate -b useradd</code>

<code>        </code><code>...</code>

<code>        </code><code>/usr/share/man/zh_CN/man8/useradd.</code><code>8</code><code>.gz</code>

<code>        </code><code>/usr/share/man/zh_TW/man8/useradd.</code><code>8</code><code>.gz</code>

<code>取出/usr/share/man/zh_TW/man8/useradd.</code><code>8</code><code>.gz的基名</code>

<code>    </code><code># echo </code><code>"/usr/share/man/zh_TW/man8/useradd.8.gz/"</code> <code>| sed </code><code>'s,/$,,'</code> <code>|  sed -r </code><code>'s#(.*/)([^/]+$)#\2#'</code>

<code>取出/usr/share/man/zh_TW/man8/useradd.</code><code>8</code><code>.gz的目錄名</code>

<code>    </code><code># echo </code><code>"/usr/share/man/zh_TW/man8/useradd.8.gz"</code> <code>| sed </code><code>'s,/$,,'</code> <code>|  sed -r </code><code>'s#(.*/)([^/]+$)#\1#'</code>

格式三:

<code>sed </code><code>'位址定界command;位址定界command;位址定界command;...'</code>

<a href="https://s4.51cto.com/wyfs02/M02/06/42/wKiom1m1G6GxmPDuAABrv2sac9E011.png" target="_blank"></a>

<a href="https://s2.51cto.com/wyfs02/M01/A4/F3/wKioL1m1G53w-f3NAABOi48EL_0841.png" target="_blank"></a>

本文轉自 lccnx 51CTO部落格,原文連結:http://blog.51cto.com/sonlich/1964161,如需轉載請自行聯系原作者

繼續閱讀