<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Neo&#039;s notes &#187; shell script</title>
	<atom:link href="http://www.neocanable.com/category/shell-script/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.neocanable.com</link>
	<description>记录一些琐碎的技术问题&#124;发泄胸中的各种不满</description>
	<lastBuildDate>Tue, 17 Jan 2012 05:37:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>linux shell快捷键</title>
		<link>http://www.neocanable.com/linux-shell-hot-key/</link>
		<comments>http://www.neocanable.com/linux-shell-hot-key/#comments</comments>
		<pubDate>Sun, 21 Nov 2010 15:46:42 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=198</guid>
		<description><![CDATA[Ctrl + a 切换到命令行开始 Ctrl + e 切换到命令行末尾 Ctrl + l 清除屏幕内容 Ctrl + u 清除剪切光标之前的内容 Ctrl + k 剪切清除光标之后的内容 Ctrl + y 复制剪切板里的内容 Ctrl + h 类似于退格键 Ctrl + r 在历史命令中查找 （这个非常好用，输入关键字就调出以前的命令了） Ctrl + c 终止命令 Ctrl + d 退出shell Ctrl + z 转入后台运行.. Ctrl + p 上一条命令 alt键比较少用,因为很多地方与远程登陆工具是有冲突的.. Alt + f 切换光标前的字母 Alt [...]]]></description>
			<content:encoded><![CDATA[<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">Ctrl + a 切换到命令行开始<br />
Ctrl + e 切换到命令行末尾<br />
Ctrl + l 清除屏幕内容<br />
Ctrl + u 清除剪切光标之前的内容<br />
Ctrl + k 剪切清除光标之后的内容<br />
Ctrl + y 复制剪切板里的内容<br />
Ctrl + h 类似于退格键<br />
Ctrl + r 在历史命令中查找 （这个非常好用，输入关键字就调出以前的命令了）<br />
Ctrl + c 终止命令<br />
Ctrl + d 退出shell<br />
Ctrl + z 转入后台运行..<br />
Ctrl + p 上一条命令<br />
alt键比较少用,因为很多地方与远程登陆工具是有冲突的..<br />
Alt + f 切换光标前的字母<br />
Alt + b 切换光标后的字母</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/linux-shell-hot-key/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rails统计来访ip数量</title>
		<link>http://www.neocanable.com/rails-analytics-ip-count/</link>
		<comments>http://www.neocanable.com/rails-analytics-ip-count/#comments</comments>
		<pubDate>Sun, 05 Sep 2010 23:35:50 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=182</guid>
		<description><![CDATA[我的blog一天有多少个ip访问？能统计的工具太多了，例如google analytics 我用的方法是直接统计日志： cat production.log &#124; grep '2010-10-31' &#124; awk '{print $4}'&#124; sort -u &#124; wc 统计10月31日有多少独立的ip来访，如果要算pv的话就将sort -u去掉了，但是其中包括搜索引擎的ip地址]]></description>
			<content:encoded><![CDATA[<p>我的blog一天有多少个ip访问？能统计的工具太多了，例如google analytics<br />
我用的方法是直接统计日志：</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">cat</span> production.log <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #ff0000;">'2010-10-31'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $4}'</span><span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #660033;">-u</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">wc</span></div></div>
<p>统计10月31日有多少独立的ip来访，如果要算pv的话就将sort -u去掉了，但是其中包括搜索引擎的ip地址</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/rails-analytics-ip-count/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sed 使用</title>
		<link>http://www.neocanable.com/sed-usage/</link>
		<comments>http://www.neocanable.com/sed-usage/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 14:31:55 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=112</guid>
		<description><![CDATA[1 sed 删除 sed -e 'd' mydoc.txt &#160; &#160; #删除mydoc.txt里面的所有内容，并打印到标准输出（相信没有哪个傻瓜这样做） sed -e '1d' mydoc.txt &#160; &#160; #删除mydoc.txt的第一行，并将其余内容打印到标准输出 sed -e '1,100d' mydoc.txt #删除1~100行,打印其余的行 sed -e '/begin/,/^end/d' mydoc.txt #删除以begin开始，以end结尾中间的所有行 2 sed 替换 sed -e 's/neo/lei/' mydoc.txt #将mydoc.txt 每行第一个neo替换成lei，如果将's/neo/lei/g' 那么替换每行出现的所有neo,这个方式很想vim里面的替换 sed -e '1,100s/neo/lei/g' #将1~100行里面所有的neo替换为lei sed -e '/^begin/,/^end/s/neo/lei/g' mydoc.txt #将在begin和end内的所有neo替换为lei sed -e 's:neo:lei:g' #sed可以使用&#34;:&#34;来代替&#34;/&#34;,这个是最实惠的，免得写负载难读的转义字符 sed -e '1,100{s/neo/lei/g s/foo/bar/g}' #将1~100行内所有的neo替换为lei,所有的foo替换为bar [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1 sed 删除</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'d'</span> mydoc.txt &nbsp; &nbsp;<br />
<span style="color: #666666; font-style: italic;">#删除mydoc.txt里面的所有内容，并打印到标准输出（相信没有哪个傻瓜这样做）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1d'</span> mydoc.txt &nbsp; &nbsp; <br />
<span style="color: #666666; font-style: italic;">#删除mydoc.txt的第一行，并将其余内容打印到标准输出</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,100d'</span> mydoc.txt <br />
<span style="color: #666666; font-style: italic;">#删除1~100行,打印其余的行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/begin/,/^end/d'</span> mydoc.txt<br />
<span style="color: #666666; font-style: italic;">#删除以begin开始，以end结尾中间的所有行</span></div></div>
<p><strong>2 sed 替换</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/neo/lei/'</span> mydoc.txt<br />
<span style="color: #666666; font-style: italic;">#将mydoc.txt 每行第一个neo替换成lei，如果将's/neo/lei/g' 那么替换每行出现的所有neo,这个方式很想vim里面的替换</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,100s/neo/lei/g'</span><br />
<span style="color: #666666; font-style: italic;">#将1~100行里面所有的neo替换为lei</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/^begin/,/^end/s/neo/lei/g'</span> mydoc.txt<br />
<span style="color: #666666; font-style: italic;">#将在begin和end内的所有neo替换为lei</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s:neo:lei:g'</span><br />
<span style="color: #666666; font-style: italic;">#sed可以使用&quot;:&quot;来代替&quot;/&quot;,这个是最实惠的，免得写负载难读的转义字符</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,100{s/neo/lei/g s/foo/bar/g}'</span><br />
<span style="color: #666666; font-style: italic;">#将1~100行内所有的neo替换为lei,所有的foo替换为bar</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/^begin/,/^end/{s/neo/lei/g}'</span><br />
<span style="color: #666666; font-style: italic;">#原理同上，将begin和end之间的neo替换为lei</span></div></div>
<p><strong>3 sed 打印</strong><br />
延续上面的例子，将d换成p，并且前面加上-n 操作符，就是打印匹配的行，而非删除；不知道能不能理解为删除的反模式^_^!</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'p'</span> mydoc.txt<br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1p'</span> mydoc.txt<br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,100p'</span> mydoc.txt &nbsp;<br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/begin/,/^end/p'</span> mydoc.txt</div></div>
<p><strong>4 sed 行号打印</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'=;p'</span> mydoc.txt</div></div>
<p>打印mydoc.txt所有行，这里“=”的含义就是打印行号，等号和‘p’的中间放了一个分号，用来执行多个命令,例如：sed -e &#8216;=;d&#8217; mydoc.txt。也可以直接使用sed -e &#8216;=&#8217; -e &#8216;d&#8217; mydoc.txt</p>
<p><strong>5 sed 插入</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1 i\neo'</span><br />
<span style="color: #666666; font-style: italic;">#在第一行之前插入neo</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1 a\neo'</span><br />
<span style="color: #666666; font-style: italic;">#在第一行之后插入neo</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,100 i\neo'</span><br />
<span style="color: #666666; font-style: italic;">#在1~100行之前插入neo</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,$ i\neo'</span><br />
<span style="color: #666666; font-style: italic;">#在第一行到最后一行都插入neo</span></div></div>
<p>sed 的插入模式只要记住&#8217;i'是“之前”，而&#8217;a'是“之后”</p>
<p><strong>6 sed 修改</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,3c\neo'</span></div></div>
<p><strong>7 sed 文件读入和文件写入</strong></p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/neo/r file'</span> mydoc.txt<br />
<span style="color: #666666; font-style: italic;">#将文件file里面的内容写入到匹配neo的后面</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/neo/w file'</span> mydoc.txt<br />
<span style="color: #666666; font-style: italic;">#mydox.txt文件内所有匹配neo的行都将写入到file里</span><br />
<br />
<span style="color: #000000; font-weight: bold;">&lt;</span>strong<span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000;">8</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> 退出<span style="color: #000000; font-weight: bold;">&lt;/</span>strong<span style="color: #000000; font-weight: bold;">&gt;</span><br />
<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #c20cb9; font-weight: bold;">cc</span> <span style="color: #007800;">lang</span>=<span style="color: #ff0000;">&quot;bash&quot;</span><span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'100q'</span> mydoc.txt</div></div>
<p>#读到100行的时候退出，不继续读</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/sed-usage/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>awk&#124;sed不再推荐(转)</title>
		<link>http://www.neocanable.com/awk-and-sed/</link>
		<comments>http://www.neocanable.com/awk-and-sed/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 15:01:57 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell script]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=89</guid>
		<description><![CDATA[sed 和 awk 都是 Linux 下常用的流编辑器，他们各有各的特色，本文并不是要做什么对比，而是权当好玩，把《SED 单行脚本快速参考》这文章，用 awk 做了一遍~ 至于孰好孰坏，那真是很难评论了。一般来说，sed 的命令会更短小一些，同时也更难读懂；而 awk 稍微长点，但是 if、while 这样的，逻辑性比较强，更加像“程序”。到底喜欢用哪个，就让各位看官自己决定吧！ 文本间隔： # 在每一行后面增加一空行 sed G awk '{printf(&#34;%s\n\n&#34;,$0)}' # 将原来的所有空行删除并在每一行后面增加一空行。 # 这样在输出的文本中每一行后面将有且只有一空行。 sed '/^$/d;G' awk '!/^$/{printf(&#34;%s\n\n&#34;,$0)}' # 在每一行后面增加两行空行 sed 'G;G' awk '{printf(&#34;%s\n\n\n&#34;,$0)}' # 将第一个脚本所产生的所有空行删除（即删除所有偶数行） sed 'n;d' awk '{f=!f;if(f)print $0}' # 在匹配式样“regex”的行之前插入一空行 sed '/regex/{x;p;x;}' awk '{if(/regex/)printf(&#34;\n%s\n&#34;,$0);else print $0}' # 在匹配式样“regex”的行之后插入一空行 sed '/regex/G' [...]]]></description>
			<content:encoded><![CDATA[<p>sed 和 awk 都是 Linux 下常用的流编辑器，他们各有各的特色，本文并不是要做什么对比，而是权当好玩，把《SED 单行脚本快速参考》这文章，用 awk 做了一遍~ 至于孰好孰坏，那真是很难评论了。一般来说，sed 的命令会更短小一些，同时也更难读懂；而 awk 稍微长点，但是 if、while 这样的，逻辑性比较强，更加像“程序”。到底喜欢用哪个，就让各位看官自己决定吧！</p>
<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">文本间隔：<br />
<br />
<span style="color: #666666; font-style: italic;"># 在每一行后面增加一空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> G<br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot;%s\n\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将原来的所有空行删除并在每一行后面增加一空行。</span><br />
<span style="color: #666666; font-style: italic;"># 这样在输出的文本中每一行后面将有且只有一空行。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^$/d;G'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'!/^$/{printf(&quot;%s\n\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在每一行后面增加两行空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'G;G'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot;%s\n\n\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将第一个脚本所产生的所有空行删除（即删除所有偶数行）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'n;d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{f=!f;if(f)print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在匹配式样“regex”的行之前插入一空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/regex/{x;p;x;}'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/regex/)printf(&quot;\n%s\n&quot;,$0);else print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在匹配式样“regex”的行之后插入一空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/regex/G'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/regex/)printf(&quot;%s\n\n&quot;,$0);else print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在匹配式样“regex”的行之前和之后各插入一空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/regex/{x;p;x;G;}'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/regex/)printf(&quot;\n%s\n\n&quot;,$0);else print $0}'</span><br />
<br />
编号：<br />
<br />
<span style="color: #666666; font-style: italic;"># 为文件中的每一行进行编号（简单的左对齐方式）。这里使用了“制表符”</span><br />
<span style="color: #666666; font-style: italic;"># （tab，见本文末尾关于’\t’的用法的描述）而不是空格来对齐边缘。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> = filename <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'N;s/\n/\t/'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{i++;printf(&quot;%d\t%s\n&quot;,i,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 对文件中的所有行编号（行号在左，文字右端对齐）。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> = filename <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{i++;printf(&quot;%6d %s\n&quot;,i,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 对文件中的所有行编号，但只显示非空白行的行号。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/./='</span> filename <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/./N; s/\n/ /'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{i++;if(!/^$/)printf(&quot;%d %s\n&quot;,i,$0);else print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 计算行数 （模拟 “wc -l”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'$='</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{i++}END{print i}'</span><br />
<br />
文本转换和替代：<br />
<br />
<span style="color: #666666; font-style: italic;"># Unix环境：转换DOS的新行符（CR/LF）为Unix格式。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/.$//'</span> <span style="color: #666666; font-style: italic;"># 假设所有行以CR/LF结束</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^M$//'</span> <span style="color: #666666; font-style: italic;"># 在bash/tcsh中，将按Ctrl-M改为按Ctrl-V</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\x0D$//'</span> <span style="color: #666666; font-style: italic;"># ssed、gsed 3.02.80，及更高版本</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{sub(/\x0D$/,&quot;&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># Unix环境：转换Unix的新行符（LF）为DOS格式。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/$/<span style="color: #780078;">`echo -e \\\r`</span>/&quot;</span> <span style="color: #666666; font-style: italic;"># 在ksh下所使用的命令</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/$'</span><span style="color: #ff0000;">&quot;/<span style="color: #780078;">`echo \\\r`</span>/&quot;</span> <span style="color: #666666; font-style: italic;"># 在bash下所使用的命令</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/$/<span style="color: #780078;">`echo \\\r`</span>/&quot;</span> <span style="color: #666666; font-style: italic;"># 在zsh下所使用的命令</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/$/\r/'</span> <span style="color: #666666; font-style: italic;"># gsed 3.02.80 及更高版本</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot;%s\r\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># DOS环境：转换Unix新行符（LF）为DOS格式。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/$//&quot;</span> <span style="color: #666666; font-style: italic;"># 方法 1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> p <span style="color: #666666; font-style: italic;"># 方法 2</span><br />
<br />
DOS环境的略过<br />
<br />
<span style="color: #666666; font-style: italic;"># DOS环境：转换DOS新行符（CR/LF）为Unix格式。</span><br />
<span style="color: #666666; font-style: italic;"># 下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的</span><br />
<span style="color: #666666; font-style: italic;"># sed可以通过其特有的“–text”选项。你可以使用帮助选项（“–help”）看</span><br />
<span style="color: #666666; font-style: italic;"># 其中有无一个“–text”项以此来判断所使用的是否是UnxUtils版本。其它DOS</span><br />
<span style="color: #666666; font-style: italic;"># 版本的的sed则无法进行这一转换。但可以用“tr”来实现这一转换。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/<span style="color: #000099; font-weight: bold;">\r</span>//&quot;</span> infile <span style="color: #000000; font-weight: bold;">&gt;</span>outfile <span style="color: #666666; font-style: italic;"># UnxUtils sed v4.0.7 或更高版本</span><br />
<span style="color: #c20cb9; font-weight: bold;">tr</span> <span style="color: #660033;">-d</span> \r <span style="color: #000000; font-weight: bold;">&lt;</span>infile <span style="color: #000000; font-weight: bold;">&gt;</span>outfile <span style="color: #666666; font-style: italic;"># GNU tr 1.22 或更高版本</span><br />
<br />
DOS环境的略过<br />
<br />
<span style="color: #666666; font-style: italic;"># 将每一行前导的“空白字符”（空格，制表符）删除</span><br />
<span style="color: #666666; font-style: italic;"># 使之左对齐</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^[ \t]*//'</span> <span style="color: #666666; font-style: italic;"># 见本文末尾关于'\t'用法的描述</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{sub(/^[ \t]+/,&quot;&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将每一行拖尾的“空白字符”（空格，制表符）删除</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/[ \t]*$//'</span> <span style="color: #666666; font-style: italic;"># 见本文末尾关于'\t'用法的描述</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{sub(/[ \t]+$/,&quot;&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将每一行中的前导和拖尾的空白字符删除</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^[ \t]*//;s/[ \t]*$//'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{sub(/^[ \t]+/,&quot;&quot;);sub(/[ \t]+$/,&quot;&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在每一行开头处插入5个空格（使全文向右移动5个字符的位置）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^/ /'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot; %s\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 以79个字符为宽度，将所有文本右对齐</span><br />
<span style="color: #666666; font-style: italic;"># 78个字符外加最后的一个空格</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/^.\{1,78\}$/ &amp;/;ta'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{printf(&quot;%79s\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 以79个字符为宽度，使所有文本居中。在方法1中，为了让文本居中每一行的前</span><br />
<span style="color: #666666; font-style: italic;"># 头和后头都填充了空格。 在方法2中，在居中文本的过程中只在文本的前面填充</span><br />
<span style="color: #666666; font-style: italic;"># 空格，并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/^.\{1,77\}$/ &amp; /;ta'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/^.\{1,77\}$/ &amp;/;ta'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/\( *\)\1/\1/'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{for(i=0;i&lt;39-length($0)/2;i++)printf(&quot; &quot;);printf(&quot;%s\n&quot;,$0)}'</span> <span style="color: #666666; font-style: italic;">#相当于上面的方法二</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在每一行中查找字串“foo”，并将找到的“foo”替换为“bar”</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/foo/bar/'</span> <span style="color: #666666; font-style: italic;"># 只替换每一行中的第一个“foo”字串</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/foo/bar/4'</span> <span style="color: #666666; font-style: italic;"># 只替换每一行中的第四个“foo”字串</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/foo/bar/g'</span> <span style="color: #666666; font-style: italic;"># 将每一行中的所有“foo”都换成“bar”</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\(.*\)foo\(.*foo\)/\1bar\2/'</span> <span style="color: #666666; font-style: italic;"># 替换倒数第二个“foo”</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\(.*\)foo/\1bar/'</span> <span style="color: #666666; font-style: italic;"># 替换最后一个“foo”</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{gsub(/foo/,&quot;bar&quot;);print $0}'</span> <span style="color: #666666; font-style: italic;"># 将每一行中的所有“foo”都换成“bar”</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 只在行中出现字串“baz”的情况下将“foo”替换成“bar”</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/baz/s/foo/bar/g'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/baz/)gsub(/foo/,&quot;bar&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将“foo”替换成“bar”，并且只在行中未出现字串“baz”的情况下替换</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/baz/!s/foo/bar/g'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/baz$/)gsub(/foo/,&quot;bar&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 不管是“scarlet”“ruby”还是“puce”，一律换成“red”</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/scarlet/red/g;s/ruby/red/g;s/puce/red/g'</span> <span style="color: #666666; font-style: italic;">#对多数的sed都有效</span><br />
gsed <span style="color: #ff0000;">'s/scarlet\|ruby\|puce/red/g'</span> <span style="color: #666666; font-style: italic;"># 只对GNU sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{gsub(/scarlet|ruby|puce/,&quot;red&quot;);print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 倒置所有行，第一行成为最后一行，依次类推（模拟“tac”）。</span><br />
<span style="color: #666666; font-style: italic;"># 由于某些原因，使用下面命令时HHsed v1.5会将文件中的空行删除</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1!G;h;$!d'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'1!G;h;$p'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{A[i++]=$0}END{for(j=i-1;j&gt;=0;j--)print A[j]}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将行中的字符逆序排列，第一个字成为最后一字，……（模拟“rev”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/\n/!G;s/\(.\)\(.*\n\)/&amp;\2\1/;//D;s/.//'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{for(i=length($0);i&gt;0;i--)printf(&quot;%s&quot;,substr($0,i,1));printf(&quot;\n&quot;)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将每两行连接成一行（类似“paste”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$!N;s/\n/ /'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{f=!f;if(f)printf(&quot;%s&quot;,$0);else printf(&quot; %s\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 如果当前行以反斜杠“\”结束，则将下一行并到当前行末尾</span><br />
<span style="color: #666666; font-style: italic;"># 并去掉原来行尾的反斜杠</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/\\$/N; s/\\\n//; ta'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/\\$/)printf(&quot;%s&quot;,substr($0,0,length($0)-1));else printf(&quot;%s\n&quot;,$0)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 如果当前行以等号开头，将当前行并到上一行末尾</span><br />
<span style="color: #666666; font-style: italic;"># 并以单个空格代替原来行头的“=”</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$!N;s/\n=/ /;ta'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'P;D'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(/^=/)printf(&quot; %s&quot;,substr($0,2));else printf(&quot;%s%s&quot;,a,$0);a=&quot;\n&quot;}END{printf(&quot;\n&quot;)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 为数字字串增加逗号分隔符号，将“1234567”改为“1,234,567”</span><br />
gsed <span style="color: #ff0000;">':a;s/\B[0-9]\{3\}\&gt;/,&amp;/;ta'</span> <span style="color: #666666; font-style: italic;"># GNU sed</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'</span> <span style="color: #666666; font-style: italic;"># 其他sed</span><br />
<br />
<span style="color: #666666; font-style: italic;">#awk的正则没有后向匹配和引用，搞的比较狼狈，呵呵。</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{while(match($0,/[0-9][0-9][0-9][0-9]+/)){$0=sprintf(&quot;%s,%s&quot;,substr($0,0,RSTART+RLENGTH-4),substr($0,RSTART+RLENGTH-3))}print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 为带有小数点和负号的数值增加逗号分隔符（GNU sed）</span><br />
gsed <span style="color: #660033;">-r</span> <span style="color: #ff0000;">':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'</span><br />
<br />
<span style="color: #666666; font-style: italic;">#和上例差不多</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{while(match($0,/[^\.0-9][0-9][0-9][0-9][0-9]+/)){$0=sprintf(&quot;%s,%s&quot;,substr($0,0,RSTART+RLENGTH-4),substr($0,RSTART+RLENGTH-3))}print $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在每5行后增加一空白行 （在第5，10，15，20，等行后增加一空白行）</span><br />
gsed <span style="color: #ff0000;">'0~5G'</span> <span style="color: #666666; font-style: italic;"># 只对GNU sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'n;n;n;n;G;'</span> <span style="color: #666666; font-style: italic;"># 其他sed</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $0;i++;if(i==5){printf(&quot;\n&quot;);i=0}}'</span><br />
<br />
选择性地显示特定行：<br />
<br />
<span style="color: #666666; font-style: italic;"># 显示文件中的前10行 （模拟“head”的行为）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> 10q<br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print;if(NR==10)exit}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示文件中的第一行 （模拟“head -1”命令）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> q<br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print;exit}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示文件中的最后10行 （模拟“tail”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$q;N;11,$D;ba'</span><br />
<br />
<span style="color: #666666; font-style: italic;">#用awk干这个有点亏，得全文缓存，对于大文件肯定很慢</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{A[NR]=$0}END{for(i=NR-9;i&lt;=NR;i++)print A[i]}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示文件中的最后2行（模拟“tail -2”命令）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$!N;$!D'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{A[NR]=$0}END{for(i=NR-1;i&lt;=NR;i++)print A[i]}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示文件中的最后一行（模拟“tail -1”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$!d'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'$p'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<br />
<span style="color: #666666; font-style: italic;">#这个比较好办，只存最后一行了。</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{A=$0}END{print A}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示文件中的倒数第二行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$!{h;d;}'</span> <span style="color: #660033;">-e</span> x <span style="color: #666666; font-style: italic;"># 当文件中只有一行时，输出空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1{$q;}'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$!{h;d;}'</span> <span style="color: #660033;">-e</span> x <span style="color: #666666; font-style: italic;"># 当文件中只有一行时，显示该行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1{$d;}'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$!{h;d;}'</span> <span style="color: #660033;">-e</span> x <span style="color: #666666; font-style: italic;"># 当文件中只有一行时，不输出</span><br />
<br />
<span style="color: #666666; font-style: italic;">#存两行呗（当文件中只有一行时，输出空行）</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{B=A;A=$0}END{print B}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 只显示匹配正则表达式的行（模拟“grep”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/regexp/p'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/regexp/!d'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/regexp/{print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 只显示“不”匹配正则表达式的行（模拟“grep -v”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/regexp/!p'</span> <span style="color: #666666; font-style: italic;"># 方法1，与前面的命令相对应</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/regexp/d'</span> <span style="color: #666666; font-style: italic;"># 方法2，类似的语法</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'!/regexp/{print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 查找“regexp”并将匹配行的上一行显示出来，但并不显示匹配行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/regexp/{g;1!p;};h'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/regexp/{print A}{A=$0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 查找“regexp”并将匹配行的下一行显示出来，但并不显示匹配行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/regexp/{n;p;}'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(A)print;A=0}/regexp/{A=1}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“regexp”的行及其前后行，并在第一行之前加上“regexp”所在行的行号 （类似“grep -A1 -B1”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/regexp/{=;x;1!p;g;$!N;p;D;}'</span> <span style="color: #660033;">-e</span> h<br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(F)print;F=0}/regexp/{print NR;print b;print;F=1}{b=$0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“AAA”、“BBB”和“CCC”的行（任意次序）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/AAA/!d; /BBB/!d; /CCC/!d'</span> <span style="color: #666666; font-style: italic;"># 字串的次序不影响结果</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(match($0,/AAA/) &amp;&amp; match($0,/BBB/) &amp;&amp; match($0,/CCC/))print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“AAA”、“BBB”和“CCC”的行（固定次序）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/AAA.*BBB.*CCC/!d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(match($0,/AAA.*BBB.*CCC/))print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“AAA”“BBB”或“CCC”的行 （模拟“egrep”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/AAA/b'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/BBB/b'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/CCC/b'</span> <span style="color: #660033;">-e</span> d <span style="color: #666666; font-style: italic;"># 多数sed</span><br />
gsed <span style="color: #ff0000;">'/AAA\|BBB\|CCC/!d'</span> <span style="color: #666666; font-style: italic;"># 对GNU sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/AAA/{print;next}/BBB/{print;next}/CCC/{print}'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/AAA|BBB|CCC/{print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“AAA”的段落 （段落间以空行分隔）</span><br />
<span style="color: #666666; font-style: italic;"># HHsed v1.5 必须在“x;”后加入“G;”，接下来的3个脚本都是这样</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/./{H;$!d;}'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'x;/AAA/!d;'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'BEGIN{RS=&quot;&quot;}/AAA/{print}'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-vRS</span>= <span style="color: #ff0000;">'/AAA/{print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“AAA”“BBB”和“CCC”三个字串的段落 （任意次序）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/./{H;$!d;}'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'x;/AAA/!d;/BBB/!d;/CCC/!d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-vRS</span>= <span style="color: #ff0000;">'{if(match($0,/AAA/) &amp;&amp; match($0,/BBB/) &amp;&amp; match($0,/CCC/))print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含“AAA”、“BBB”、“CCC”三者中任一字串的段落 （任意次序）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/./{H;$!d;}'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'x;/AAA/b'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/BBB/b'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/CCC/b'</span> <span style="color: #660033;">-e</span> d<br />
gsed <span style="color: #ff0000;">'/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d'</span> <span style="color: #666666; font-style: italic;"># 只对GNU sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-vRS</span>= <span style="color: #ff0000;">'/AAA|BBB|CCC/{print &quot;&quot;;print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含65个或以上字符的行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/^.\{65\}/p'</span><br />
<br />
<span style="color: #c20cb9; font-weight: bold;">cat</span> ll.txt <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(length($0)&gt;=65)print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示包含65个以下字符的行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/^.\{65\}/!p'</span> <span style="color: #666666; font-style: italic;"># 方法1，与上面的脚本相对应</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^.\{65\}/d'</span> <span style="color: #666666; font-style: italic;"># 方法2，更简便一点的方法</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(length($0)&lt;=65)print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示部分文本——从包含正则表达式的行开始到最后一行结束</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/regexp/,$p'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/regexp/{F=1}{if(F)print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示部分文本——指定行号范围（从第8至第12行，含8和12行）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'8,12p'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'8,12!d'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(NR&gt;=8 &amp;&amp; NR&lt;12)print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示第52行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'52p'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'52!d'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'52q;d'</span> <span style="color: #666666; font-style: italic;"># 方法3, 处理大文件时更有效率</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(NR==52){print;exit}}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 从第3行开始，每7行显示一次</span><br />
gsed <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'3~7p'</span> <span style="color: #666666; font-style: italic;"># 只对GNU sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'3,${p;n;n;n;n;n;n;}'</span> <span style="color: #666666; font-style: italic;"># 其他sed</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(NR==3)F=1}{if(F){i++;if(i%7==1)print}}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 显示两个正则表达式之间的文本（包含）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/Iowa/,/Montana/p'</span> <span style="color: #666666; font-style: italic;"># 区分大小写方式</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/Iowa/{F=1}{if(F)print}/Montana/{F=0}'</span><br />
<br />
选择性地删除特定行：<br />
<br />
<span style="color: #666666; font-style: italic;"># 显示通篇文档，除了两个正则表达式之间的内容</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/Iowa/,/Montana/d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/Iowa/{F=1}{if(!F)print}/Montana/{F=0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中相邻的重复行（模拟“uniq”）</span><br />
<span style="color: #666666; font-style: italic;"># 只保留重复行中的第一行，其他行删除</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$!N; /^\(.*\)\n\1$/!P; D'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if($0!=B)print;B=$0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中的重复行，不管有无相邻。注意hold space所能支持的缓存大小，或者使用GNU sed。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'G; s/\n/&amp;&amp;/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'</span> <span style="color: #666666; font-style: italic;">#bones7456注：我这里此命令并不能正常工作</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(!($0 in B))print;B[$0]=1}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除除重复行外的所有行（模拟“uniq -d”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$!N; s/^\(.*\)\n\1$/\1/; t; D'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if($0==B &amp;&amp; $0!=l){print;l=$0}B=$0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中开头的10行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1,10d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(NR&gt;10)print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中的最后一行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'$d'</span><br />
<br />
<span style="color: #666666; font-style: italic;">#awk在过程中并不知道文件一共有几行，所以只能通篇缓存，大文件可能不适合，下面两个也一样</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{B[NR]=$0}END{for(i=0;i&lt;=NR-1;i++)print B[i]}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中的最后两行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'N;$!P;$!D;$d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{B[NR]=$0}END{for(i=0;i&lt;=NR-2;i++)print B[i]}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中的最后10行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'$d;N;2,10ba'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'P;D'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'1,10!{P;N;D;};N;ba'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{B[NR]=$0}END{for(i=0;i&lt;=NR-10;i++)print B[i]}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除8的倍数行</span><br />
gsed <span style="color: #ff0000;">'0~8d'</span> <span style="color: #666666; font-style: italic;"># 只对GNU sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'n;n;n;n;n;n;n;d;'</span> <span style="color: #666666; font-style: italic;"># 其他sed</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(NR%8!=0)print}'</span> <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">head</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除匹配式样的行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/pattern/d'</span> <span style="color: #666666; font-style: italic;"># 删除含pattern的行。当然pattern可以换成任何有效的正则表达式</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(!match($0,/pattern/))print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件中的所有空行（与“grep ‘.’ ”效果相同）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^$/d'</span> <span style="color: #666666; font-style: italic;"># 方法1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/./!d'</span> <span style="color: #666666; font-style: italic;"># 方法2</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(!match($0,/^$/))print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 只保留多个相邻空行的第一行。并且删除文件顶部和尾部的空行。</span><br />
<span style="color: #666666; font-style: italic;"># （模拟“cat -s”）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/./,/^$/!d'</span> <span style="color: #666666; font-style: italic;">#方法1，删除文件顶部的空行，允许尾部保留一空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^$/N;/\n$/D'</span> <span style="color: #666666; font-style: italic;">#方法2，允许顶部保留一空行，尾部不留空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(!match($0,/^$/)){print;F=1}else{if(F)print;F=0}}'</span> <span style="color: #666666; font-style: italic;">#同上面的方法2</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 只保留多个相邻空行的前两行。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^$/N;/\n$/N;//D'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(!match($0,/^$/)){print;F=0}else{if(F&lt;2)print;F++}}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件顶部的所有空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/./,$!d'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(F || !match($0,/^$/)){print;F=1}}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除文件尾部的所有空行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/^\n*$/{$d;N;ba'</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'}'</span> <span style="color: #666666; font-style: italic;"># 对所有sed有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/^\n*$/N;/\n$/ba'</span> <span style="color: #666666; font-style: italic;"># 同上，但只对 gsed 3.02.*有效</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/^.+$/{for(i=l;i&lt;NR-1;i++)print &quot;&quot;;print;l=NR}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 删除每个段落的最后一行</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'/^$/{p;h;};/./{x;/./p;}'</span><br />
<br />
<span style="color: #666666; font-style: italic;">#很长，很ugly，应该有更好的办法</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-vRS</span>= <span style="color: #ff0000;">'{B=$0;l=0;f=1;while(match(B,/\n/)&gt;0){print substr(B,l,RSTART-l-f);l=RSTART;sub(/\n/,&quot;&quot;,B);f=0};print &quot;&quot;}'</span><br />
<br />
特殊应用：<br />
<br />
<span style="color: #666666; font-style: italic;"># 移除手册页（man page）中的nroff标记。在Unix System V或bash shell下使</span><br />
<span style="color: #666666; font-style: italic;"># 用’echo’命令时可能需要加上 -e 选项。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/.<span style="color: #780078;">`echo \\\b`</span>//g&quot;</span> <span style="color: #666666; font-style: italic;"># 外层的双括号是必须的（Unix环境）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/.^H//g'</span> <span style="color: #666666; font-style: italic;"># 在bash或tcsh中, 按 Ctrl-V 再按 Ctrl-H</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/.\x08//g'</span> <span style="color: #666666; font-style: italic;"># sed 1.5，GNU sed，ssed所使用的十六进制的表示方法</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{gsub(/.\x08/,&quot;&quot;,$0);print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 提取新闻组或 e-mail 的邮件头</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^$/q'</span> <span style="color: #666666; font-style: italic;"># 删除第一行空行后的所有内容</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print}/^$/{exit}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 提取新闻组或 e-mail 的正文部分</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1,/^$/d'</span> <span style="color: #666666; font-style: italic;"># 删除第一行空行之前的所有内容</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{if(F)print}/^$/{F=1}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 从邮件头提取“Subject”（标题栏字段），并移除开头的“Subject:”字样</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^Subject: */!d; s///;q'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/^Subject:.*/{print substr($0,10)}/^$/{exit}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 从邮件头获得回复地址</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^Reply-To:/q; /^From:/h; /./d;g;q'</span><br />
<br />
<span style="color: #666666; font-style: italic;">#好像是输出第一个Reply-To:开头的行？From是干啥用的？不清楚规则。。</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/^Reply-To:.*/{print;exit}/^$/{exit}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 获取邮件地址。在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮地址的部分剃除。（见上一脚本）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/ *(.*)//; s/&gt;.*//; s/.*[:&lt;] *//'</span><br />
<br />
<span style="color: #666666; font-style: italic;">#取尖括号里的东西吧？</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span><span style="color: #ff0000;">'[&lt;&gt;]+'</span> <span style="color: #ff0000;">'{print $2}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 在每一行开头加上一个尖括号和空格（引用信息）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^/&gt; /'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print &quot;&gt; &quot; $0}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将每一行开头处的尖括号和空格删除（解除引用）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/^&gt; //'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/^&gt; /{print substr($0,3)}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 移除大部分的HTML标签（包括跨行标签）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-e</span> :a <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'s/&lt;[^&gt;]*&gt;//g;/&lt;/N;//ba'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{gsub(/&lt;[^&gt;]*&gt;/,&quot;&quot;,$0);print}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 将分成多卷的uuencode文件解码。移除文件头信息，只保留uuencode编码部分。</span><br />
<span style="color: #666666; font-style: italic;"># 文件必须以特定顺序传给sed。下面第一种版本的脚本可以直接在命令行下输入；</span><br />
<span style="color: #666666; font-style: italic;"># 第二种版本则可以放入一个带执行权限的shell脚本中。（由Rahul Dhesi的一</span><br />
<span style="color: #666666; font-style: italic;"># 个脚本修改而来。）</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^end/,/^begin/d'</span> file1 file2 ... fileX <span style="color: #000000; font-weight: bold;">|</span> uudecode <span style="color: #666666; font-style: italic;"># vers. 1</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/^end/,/^begin/d'</span> <span style="color: #ff0000;">&quot;$@&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> uudecode <span style="color: #666666; font-style: italic;"># vers. 2</span><br />
<br />
<span style="color: #666666; font-style: italic;">#我不想装个uudecode验证，大致写个吧</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/^end/{F=0}{if(F)print}/^begin/{F=1}'</span> file1 file2 ... fileX<br />
<br />
<span style="color: #666666; font-style: italic;"># 将文件中的段落以字母顺序排序。段落间以（一行或多行）空行分隔。GNU sed使用</span><br />
<span style="color: #666666; font-style: italic;"># 字元“\v”来表示垂直制表符，这里用它来作为换行符的占位符——当然你也可以</span><br />
<span style="color: #666666; font-style: italic;"># 用其他未在文件中使用的字符来代替它。</span><br />
<span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'/./{H;d;};x;s/\n/={NL}=/g'</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1s/={NL}=//;s/={NL}=/\n/g'</span><br />
gsed <span style="color: #ff0000;">'/./{H;d};x;y/\n/\v/'</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1s/\v//;y/\v/\n/'</span><br />
<span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-vRS</span>= <span style="color: #ff0000;">'{gsub(/\n/,&quot;\v&quot;,$0);print}'</span> ll.txt <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sort</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{gsub(/\v/,&quot;\n&quot;,$0);print;print &quot;&quot;}'</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 分别压缩每个.TXT文件，压缩后删除原来的文件并将压缩后的.ZIP文件</span><br />
<span style="color: #666666; font-style: italic;"># 命名为与原来相同的名字（只是扩展名不同）。（DOS环境：“dir /b”</span><br />
<span style="color: #666666; font-style: italic;"># 显示不带路径的文件名）。</span><br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #000000; font-weight: bold;">@</span><span style="color: #7a0874; font-weight: bold;">echo</span> off <span style="color: #000000; font-weight: bold;">&gt;</span>zipup.bat<br />
<span style="color: #c20cb9; font-weight: bold;">dir</span> <span style="color: #000000; font-weight: bold;">/</span>b <span style="color: #000000; font-weight: bold;">*</span>.txt <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">&quot;s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/&quot;</span> <span style="color: #000000; font-weight: bold;">&gt;&gt;</span>zipup.bat<br />
<br />
DOS 环境再次略过，而且我觉得这里用 <span style="color: #c20cb9; font-weight: bold;">bash</span> 的参数 <span style="color: #800000;">${i%.TXT}</span>.zip 替换更帅。<br />
<br />
下面的一些 SED 说明略过，需要的朋友自行查看原文。</div></div>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/awk-and-sed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rails的svn提交脚本</title>
		<link>http://www.neocanable.com/shell-script-for-svn/</link>
		<comments>http://www.neocanable.com/shell-script-for-svn/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 13:04:10 +0000</pubDate>
		<dc:creator>Neo</dc:creator>
				<category><![CDATA[shell script]]></category>
		<category><![CDATA[系统管理]]></category>

		<guid isPermaLink="false">http://www.neocanable.com/?p=23</guid>
		<description><![CDATA[#!/bin/bash # 当前目录 CURRENT_DIR=`pwd` is_workstation=&#40;`svn status $CURRENT_DIR`&#41; if &#91; &#34;$is_workstation&#34; = &#34;&#34; &#93;;then &#160; &#160; exit 1 fi echo &#160;-n &#34;是否需要更新:&#34; read need_update if &#91; &#34;$need_update&#34; = &#34;y&#34; &#93; &#124;&#124; &#91; &#34;$need_update&#34; = &#34;Y&#34; &#93;;then &#160; &#160; # 查找错误的关键字 &#160; &#160; update_result=`svn up $CURRENT_DIR &#124; grep 失败 -o` &#160; &#160; if &#91; &#34;$update_result&#34; = &#34;&#34; [...]]]></description>
			<content:encoded><![CDATA[<div class="codecolorer-container bash vibrant" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="bash codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">#!/bin/bash</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 当前目录</span><br />
<span style="color: #007800;">CURRENT_DIR</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">pwd</span><span style="color: #000000; font-weight: bold;">`</span><br />
<br />
<span style="color: #007800;">is_workstation</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svn status</span> <span style="color: #007800;">$CURRENT_DIR</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$is_workstation</span>&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">1</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> &nbsp;<span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;是否需要更新:&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">read</span> need_update<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$need_update</span>&quot;</span> = <span style="color: #ff0000;">&quot;y&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$need_update</span>&quot;</span> = <span style="color: #ff0000;">&quot;Y&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #666666; font-style: italic;"># 查找错误的关键字</span><br />
&nbsp; &nbsp; <span style="color: #007800;">update_result</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svn up</span> <span style="color: #007800;">$CURRENT_DIR</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> 失败 -o<span style="color: #000000; font-weight: bold;">`</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$update_result</span>&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;更新失败，存在冲突或网络连接有bug，是否继续提交?&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">read</span> next<br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$next</span>&quot;</span> = <span style="color: #ff0000;">&quot;y&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$next</span>&quot;</span> = <span style="color: #ff0000;">&quot;Y&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;提交过程中可能会出现错误&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">exit</span> <span style="color: #000000;">0</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 判断是否是tmp目录下的文件</span><br />
is_tmp_file<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; <span style="color: #007800;">tmp_file</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-o</span> \<span style="color: #000000; font-weight: bold;">/</span>tmp\<span style="color: #000000; font-weight: bold;">/`</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$tmp_file</span>&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #000000;">0</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #000000;">1</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<span style="color: #666666; font-style: italic;"># 判断是否是log目录下的文件</span><br />
is_log_file<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span><br />
&nbsp; <span style="color: #007800;">log_file</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$1</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-o</span> \<span style="color: #000000; font-weight: bold;">/</span>log\<span style="color: #000000; font-weight: bold;">/`</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$log_file</span>&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #000000;">0</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">return</span> <span style="color: #000000;">1</span><br />
&nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
<span style="color: #7a0874; font-weight: bold;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 需要添加的文件</span><br />
<span style="color: #007800;">TO_ADD_FILE</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svn status</span> <span style="color: #007800;">$CURRENT_DIR</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> ^? <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$TO_ADD_FILE</span>&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;没有需要添加的文件&quot;</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #800000;">${TO_ADD_FILE[@]}</span>;<span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> is_log_file <span style="color: #007800;">$file</span> <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> is_tmp_file <span style="color: #007800;">$file</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">svn add</span> <span style="color: #007800;">$file</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> &nbsp;<span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot; '<span style="color: #007800;">$file</span>' 是log文件或者是tmp文件,是否提交?&quot;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">read</span> need_add<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$need_add</span>&quot;</span> = <span style="color: #ff0000;">&quot;y&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span> <span style="color: #000000; font-weight: bold;">||</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$need_add</span>&quot;</span> = <span style="color: #ff0000;">&quot;Y&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">svn add</span> <span style="color: #007800;">$file</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">fi</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #666666; font-style: italic;"># 需要删除的文件</span><br />
<span style="color: #007800;">TO_DELETE_FILE</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">svn status</span> <span style="color: #007800;">$CURRENT_DIR</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> ^<span style="color: #000000; font-weight: bold;">!</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $2}'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">&#41;</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$TO_DELETE_FILE</span>&quot;</span> = <span style="color: #ff0000;">&quot;&quot;</span> <span style="color: #7a0874; font-weight: bold;">&#93;</span>;<span style="color: #000000; font-weight: bold;">then</span><br />
&nbsp; &nbsp; <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;没有需要删除的文件&quot;</span><br />
<span style="color: #000000; font-weight: bold;">else</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">for</span> <span style="color: #c20cb9; font-weight: bold;">file</span> <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #800000;">${TO_DELETE_FILE[@]}</span>;<span style="color: #000000; font-weight: bold;">do</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span style="color: #c20cb9; font-weight: bold;">svn delete</span> <span style="color: #007800;">$file</span><br />
&nbsp; &nbsp; <span style="color: #000000; font-weight: bold;">done</span><br />
<span style="color: #000000; font-weight: bold;">fi</span><br />
<br />
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;添加注释:&quot;</span><br />
<span style="color: #c20cb9; font-weight: bold;">read</span> CO<br />
<br />
<span style="color: #c20cb9; font-weight: bold;">svn ci</span> <span style="color: #660033;">-m</span> <span style="color: #ff0000;">&quot;<span style="color: #007800;">$CO</span>&quot;</span></div></div>
<p>第一次给rails项目写了个提交的脚本，这个脚本现在看起来，那个风中凌乱啊!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.neocanable.com/shell-script-for-svn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

