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 --> sed script file2</code>
<code>使用方法基本同vim指令</code>
<code>1</code><code>)vim % --> sed 不用指明</code>
<code>2</code><code>)vim @@ ## </code><code>// --> 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 < /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 < /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 < /etc/passwd | sed 's,rOOt,ROOT,i'</code>
<code>[root@localhost bin]</code><code># head -n 1 < /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 < /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 > /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" >> /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,如需轉載請自行聯系原作者