﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Natural-随笔分类-Linux</title><link>http://www.blogjava.net/Man/category/49803.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 30 Nov 2012 06:33:58 GMT</lastBuildDate><pubDate>Fri, 30 Nov 2012 06:33:58 GMT</pubDate><ttl>60</ttl><item><title>BASH中的特殊符号  </title><link>http://www.blogjava.net/Man/archive/2012/11/29/392231.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Thu, 29 Nov 2012 13:36:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/11/29/392231.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/392231.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/11/29/392231.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/392231.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/392231.html</trackback:ping><description><![CDATA[<div><div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"=""> <div>1. $变量</div> <div>变量不需先声明，使用$引用变量的值</div> <div>&nbsp;&nbsp;x=12 &nbsp; &nbsp; &nbsp; &nbsp; ##等号左右不能有空格 &nbsp; &nbsp; &nbsp; &nbsp;</div> <div>&nbsp;&nbsp;echo $x</div> <div>一些重要变量</div> <div>$HOME 当前用户主目录 </div> <div>$PATH 搜索目录</div> <div>$PS1 命令提示符</div> <div>$PS2 二级提示符</div> <div>$IFS shell输入分隔符，通常为空格、制表符和换行符</div> <div>$# 参数个数</div> <div>$0 shell脚本名字</div> <div>$1,$2... 第1,2个参数</div> <div>$* 所有参数，用IFS中的第一个字符分隔</div> <div>$@ 类似$*，但不使用IFS字符分隔</div> <div>$?&nbsp; 前条命令的退出状态0(true) 1(false)</div> <div></div> <div></div> <div></div> <div>2. 单引号 ( '' )</div> <div>当shell碰到第一个单引号时，它忽略掉其后直到右引号的所有特殊字符</div> <div></div> <div>3. 双引号 ( " " )</div> <div>双引号作用与单引号类似，区别在于它没有那么严格。单引号告诉shell忽略所有特殊字符，</div> <div>而双引号中的三种特殊字符不被忽略：$,\,` ,即双引号会解释字符串的特别意思,而单引号直接使用字符串。</div> <div></div> <div>4. 反引号(``)或$()</div> <div><strong>命令替换</strong>，$()格式受到POSIX标准支持,$(command),执行命令并捕获其输出,可以放到变量中如下面的expr例子</div> <div></div> <div>5. (( )) 或let</div> <div><strong>算术赋值</strong>，用来给表达式赋值并返回一个状态码。利用算术赋值可以进行赋值运算及逻辑比较</div> <div>((x=x+1)) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ##&nbsp;x=$((x+1))</div> <div>if ((30 &lt; age &amp;&amp; age &lt; 60)); then</div> <div></div> <div></div> <div>6. $(( ))</div> <div><strong>算术扩展</strong>，用于显示表达式的值或者把值赋给一个变量，可替代expr命令,比expr更高效.</div> <div>&nbsp;x=$(($x+1)) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;##$(( ))中单个变量引用$符可选，即可写成 x=$((x+1))</div> <div>&nbsp;x=$(expr $x + 1) &nbsp;##加号左右要有空格 expr $x + 1 执行结果捕获其输出放到变量</div> <div></div> <div>7. [ ] 或test</div> <div>&nbsp;&nbsp;if [ -f fred.c ] &nbsp;##要有空格</div> <div>&nbsp;&nbsp;if [ 30 -lt $age -a $age -lt 60 ]; then</div> <div></div> <div>8. [[ ]]</div> <div>作用与[ ]类似，操作符不同，与C语言操作一致</div> <div>if [[ 30 &lt; $age &amp;&amp; $age &lt; 60 ]]; then &nbsp; ##要有空格,变量前要有$</div> <div></div> <div>9. &amp;&amp; || 及!</div> <div>&nbsp;&nbsp;statement1 &amp;&amp; statement2 &amp;&amp; statement3，上一条命令返回true才执行下一条；||类似</div> <div>&nbsp;&nbsp;if [ -f fred.c ] &amp;&amp; echo 'exists' &amp;&amp; [ -f fred.h ] &nbsp; ## echo 返回的是true</div> <div>&nbsp;</div> <div>10. ( ) 子shell</div> <div>11. : 空命令，返回true</div> <div>12.&nbsp; &lt;&lt; Here文档</div> <div></div> <div><strong>bash中命令行扩展顺序</strong></div> <div>（1）花括号扩展&nbsp; rm {main,temp,test}.c</div> <div>（2）代字符扩展 echo ~</div> <div>（3）参数扩展和变量扩展 $a</div> <div>（4）算术扩展&nbsp;&nbsp;x=$(($x+1))</div> <div>（5）命令替换 $(command)</div> <div>（6）分词 IFS</div> <div>（7）路径名</div> <div>（8）处理替换</div><wbr></div></div><img src ="http://www.blogjava.net/Man/aggbug/392231.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-11-29 21:36 <a href="http://www.blogjava.net/Man/archive/2012/11/29/392231.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell 注释多行方法</title><link>http://www.blogjava.net/Man/archive/2012/03/09/371596.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Fri, 09 Mar 2012 09:36:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/03/09/371596.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/371596.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/03/09/371596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/371596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/371596.html</trackback:ping><description><![CDATA[<div>由于Shell不支持直接多行注释，总结了以下Shell注释多行的变通方法<br /><br /><br /><div><strong>一、通过Here Documents和:实现</strong></div><div>1、最简单方法<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000; ">:&lt;&lt;</span><span style="color: #000000; ">BLOCK<br />注释内容<br />BLOCK</span></div><div><div>&nbsp;&nbsp; &nbsp; &nbsp;把输入重定义到前面的命令，但是:是空命令，所以就相当于注释了。</div><div>&nbsp;&nbsp; &nbsp; &nbsp;如果注释中有反引号的命令就会报错。<span style="color: red; ">反引号部分没被注释掉</span>，例如ab=`ls -l abc`就不会被注释掉。</div><div></div><div>2、解决注释中有反引号的问题<br />&nbsp;&nbsp; &nbsp; &nbsp;在windows的<span style="color: red; ">cygwin环境中测试时报错</span><br /><div>A、方法一</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><span style="color: #000000; ">:&lt;&lt;</span><span style="color: #000000; ">BLOCK</span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; font-weight: bold; "><br />注释内容<br /></span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; ">BLOCK</span></div><div>B、方法二</div><div><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><span style="color: #000000; ">:&lt;&lt;</span><span style="color: #000000; ">BLOCK</span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; font-weight: bold; "><br />注释内容<br /></span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; ">BLOCK</span></div></div><div>C、方法三<br /><div><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><span style="color: #000000; ">:&lt;&lt;</span><span style="color: #000000; font-weight: bold; ">'</span><span style="color: #000000; font-weight: bold; "><br />注释内容<br /></span><span style="color: #000000; font-weight: bold; ">'</span></div></div><div><div>&nbsp;&nbsp; &nbsp; &nbsp;以上三种方法都是通过在:&lt;</div><div>&nbsp;&nbsp; &nbsp; &nbsp;BLOCK为Here Documents中的定义符号可以随意起名，只要前后匹配就行了</div><div></div><div>3、简单说说:指令和Here Documents</div><div>&nbsp;&nbsp; &nbsp; &nbsp;:就是什么也不作(do nothing)即空命令。它的最基本作用就是在if,then条件中。在if语句中各部分必须接执行命令，但有时你不在乎条件是为真(或假)只在乎相反情况。</div></div><font class="Apple-style-span" size="2"><div><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div><div><span style="color: #800000; "><strong>command</strong></span>&lt;&lt;word</div><div>any input</div><div>file content</div><div>word</div></div><span style="color: #000000; font-weight: bold; "></span></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div></font><div><div>&nbsp;&nbsp; &nbsp; &nbsp;是Here Documents的用法，意思是将以上的定义符(word，也可以理解成本地文档名)传给某脚本或命令，word的内容为两个word间输入任意内容(word为Here Documents中的定义符号可以随意起名，只要前后匹配就行了），这样就可以在脚本中用command来执行输入而不必再重建一文件。</div><div>　　常用在菜单屏幕中，例如：</div></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="color: red; "><strong></strong></span></div><div><div><span style="color: #ff00ff; ">cat </span>&lt;&lt;Menu</div><div>　　1. List files</div><div>　　2.HELP</div><div>　　3.exit</div><div>Menu</div><div>&nbsp;</div><div>:&lt;&lt;word</div><div>....注释内容</div><div>word</div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;&nbsp; &nbsp; &nbsp;就类似于建一本地文件,然后对它执行空命令，也就是什么也不做，就相当于注释了。</div><div><div>　　更详细的Here Document说明可参考http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/here-docs.html</div></div></div></div><br /><br /><div><strong>二、通过循环实现</strong></div><div><div>1、while和:实现</div><div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="color: red; "><strong></strong></span></div><div><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">while :&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">do&nbsp;</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">break</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">done</div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">&nbsp;</div></div></div></div><div>2、until和:实现</div><div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">until :</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">done</div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">在<span style="color: #ff0000; ">cygwin中测试时报错</span>，要按照如下格式</div></div></div></div><div></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">until :<br /><span style="color: #800000; "><strong>do</strong></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">done</div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div><div></div><div><br /><div>3、if和:实现<br /><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">if [ 1 -eq 2 ]<br />then</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">fi</div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></span></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div>　</div></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意注释内容中是否含&#8221;done/fi&#8221;，包含会造成意外结束<br /><br /></div><div></div><div><strong>三、其它方法</strong><br /><div><div>1、方法一</div><div><span class="Apple-style-span" style="white-space: pre;"><div><span style="white-space: normal; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">: :||:&lt;&lt;\COMMENTS</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">....注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">COMMENTS</div></div></div></span></div></div></div></div></span></div></div></div></div></span></div></span></div><div>　　高手说上面这种方法最好，因为Here Documents部分不会执行到，只会分析到，应该不会对第二个:作实际的IO重定向。</div><div></div><div>2、方法二</div><div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="white-space: pre; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="white-space: normal; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div>: &lt;&lt; 'BLOCK'</div></div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">....注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div>BLOCK</div></div></div></div></span></div></div></div></div></span></div></div></div></div></span></div></span></div></div></div><div>　　可以将里面的变量扩展关闭掉。</div><div></div><div>3、方法三</div><div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="white-space: pre; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="white-space: normal; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">:||{</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">....注释内容</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">}</div></div></div></div></span></div></div></div></div></span></div></div></div></div></span></div></span></div></div></div></div></div><div>　　这种方法不用到Here Documents，不过这种方法要注意注释内容中的}</div><div></div><div>4、方法四</div><div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="white-space: pre; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="white-space: normal; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: #eeeeee; font-size: 13px; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-top-style: solid; border-right-style: solid; border-bottom-style: solid; border-left-style: solid; border-top-color: #cccccc; border-right-color: #cccccc; border-bottom-color: #cccccc; border-left-color: #cccccc; width: 764px; word-break: break-all; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><span style="font-size: 14px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "></div><div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">:&lt;&lt;\EOF</div><div style="padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; ">....注释内容<br />EOF</div></div></div></div></div></span></div></div></div></div></span></div></div></div></div></span></div></span></div></div></div></div></div></div></div><div>　　上面方法可关掉Here Documents中的扩展功能，在Here-Document中忽略ending marker前的任何字符</div><div>　　实际上使用&lt;&lt;\EOF &lt;&lt;'EOF'，甚至&lt;&lt;&lt;\eof在语法上面更加的简洁。不过这种方法同样要注意注释内容中的eof&lt; p=""&gt; &lt;&lt;\eof在语法上面更加的简洁。不过这种方法同样要注意注释内容中的eof&lt;&gt;<br /><br /></div><div></div><div><strong>四、参考资料</strong></div><div></div><div>　　http://bbs.chinaunix.net/viewthread.php?tid=1152658&amp;extra=&amp;page=1</div><div>　　http://blog.csdn.net/magicpang/archive/2009/04/14/4072878.aspx</div><div>　　http://bbs.chinaunix.net/viewthread.php?tid=1196678&amp;extra=&amp;page=1</div></div></div></div><br /><br /><br /><br /><br /></div></div></div></div></div><img src ="http://www.blogjava.net/Man/aggbug/371596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-03-09 17:36 <a href="http://www.blogjava.net/Man/archive/2012/03/09/371596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[demo]sed字符串替换</title><link>http://www.blogjava.net/Man/archive/2012/02/21/370422.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Tue, 21 Feb 2012 07:51:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/21/370422.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/370422.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/21/370422.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/370422.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/370422.html</trackback:ping><description><![CDATA[<div>找出Z:\A、Z:\B目录下所有内容带&#8220;APPLE&#8220;的文件，把"APPLE"替换成"ORANGE"，并输出到Z:\C相应的目录下</div><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080; ">&nbsp;&nbsp;1</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">!/bin/sh</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;2</span>&nbsp;<span style="color: #008000; ">#</span><span style="color: #008000; ">&nbsp;Auto&nbsp;replace&nbsp;the&nbsp;files'&nbsp;content&nbsp;and&nbsp;copy&nbsp;them&nbsp;to&nbsp;the&nbsp;specified&nbsp;directory.</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;3</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;4</span>&nbsp;<span style="color: #000000; ">SEARCH_WORD</span><span style="color: #000000; ">=</span><span style="color: #800000; ">'</span><span style="color: #800000; ">APPLE</span><span style="color: #800000; ">'</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;5</span>&nbsp;<span style="color: #000000; ">REPLACE_WORD</span><span style="color: #000000; ">=</span><span style="color: #800000; ">'</span><span style="color: #800000; ">ORANGE</span><span style="color: #800000; ">'</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;6</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;7</span>&nbsp;<span style="color: #000000; ">SRC_DIR_ARRAY</span><span style="color: #000000; ">=</span><span style="color: #000000; ">(<br /></span><span style="color: #008080; ">&nbsp;&nbsp;8</span>&nbsp;<span style="color: #000000; "></span><span style="color: #800000; ">'</span><span style="color: #800000; ">Z:/A</span><span style="color: #800000; ">'</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;&nbsp;9</span>&nbsp;<span style="color: #000000; "></span><span style="color: #800000; ">'</span><span style="color: #800000; ">Z:/B</span><span style="color: #800000; ">'</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;10</span>&nbsp;<span style="color: #000000; ">)<br /></span><span style="color: #008080; ">&nbsp;11</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;12</span>&nbsp;<span style="color: #000000; ">OUTPUT</span><span style="color: #000000; ">=</span><span style="color: #800000; ">'</span><span style="color: #800000; ">Z:/C</span><span style="color: #800000; ">'</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;13</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;14</span>&nbsp;<span style="color: #000000; ">global_lastDir_pre</span><span style="color: #000000; ">=</span><span style="color: #800000; ">''</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;15</span>&nbsp;<span style="color: #000000; ">declare&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">i&nbsp;count</span><span style="color: #000000; ">=</span><span style="color: #000000; ">0<br /></span><span style="color: #008080; ">&nbsp;16</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;17</span>&nbsp;<span style="color: #000000; ">function&nbsp;checkFileDir<br /></span><span style="color: #008080; ">&nbsp;18</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;19</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;fileNameWithPath</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;20</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;dirPre</span><span style="color: #000000; ">=</span><span style="color: #000000; ">${fileNameWithPath</span><span style="color: #000000; ">%/*</span><span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;21</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;tempPath</span><span style="color: #000000; ">=</span><span style="color: #000000; ">${OUTPUT}</span><span style="color: #000000; ">/</span><span style="color: #000000; ">${dirPre}<br /></span><span style="color: #008080; ">&nbsp;22</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;global_lastOutput</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$OUTPUT</span><span style="color: #000000; ">/</span><span style="color: #000000; ">$fileNameWithPath<br /></span><span style="color: #008080; ">&nbsp;23</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;24</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;!&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">d&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$tempPath</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;]<br /></span><span style="color: #008080; ">&nbsp;25</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;then<br /></span><span style="color: #008080; ">&nbsp;26</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tar&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">cf&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$fileNameWithPath</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;tar&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">C&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$OUTPUT</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">xf&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;27</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">f&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$global_lastOutput</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;28</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fi<br /></span><span style="color: #008080; ">&nbsp;29</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;30</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;31</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;32</span>&nbsp;<span style="color: #000000; ">function&nbsp;replaceFile<br /></span><span style="color: #008080; ">&nbsp;33</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;34</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;fileNameWithPath</span><span style="color: #000000; ">=</span><span style="color: #000000; ">${</span><span style="color: #000000; ">1</span><span style="color: #008000; ">#</span><span style="color: #008000; ">*/}</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;35</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;regix</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$</span><span style="color: #000000; ">2</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;36</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;local&nbsp;thisDir_pre</span><span style="color: #000000; ">=</span><span style="color: #000000; ">${fileNameWithPath</span><span style="color: #000000; ">%/*</span><span style="color: #000000; ">}&nbsp;<br /></span><span style="color: #008080; ">&nbsp;37</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;38</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$thisDir_pre</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">=</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$global_lastDir_pre</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;]<br /></span><span style="color: #008080; ">&nbsp;39</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;then<br /></span><span style="color: #008080; ">&nbsp;40</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sed&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$regix</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$fileNameWithPath</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$global_lastOutput</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;41</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">continue</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;42</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fi<br /></span><span style="color: #008080; ">&nbsp;43</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;44</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;checkFileDir&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$fileNameWithPath</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;45</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;global_lastDir_pre</span><span style="color: #000000; ">=</span><span style="color: #000000; ">$thisDir_pre<br /></span><span style="color: #008080; ">&nbsp;46</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;47</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;sed&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$regix</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$fileNameWithPath</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$global_lastOutput</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;48</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;49</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;50</span>&nbsp;<span style="color: #000000; ">function&nbsp;echoNote<br /></span><span style="color: #008080; ">&nbsp;51</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;52</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">Wrong&nbsp;directory&nbsp;detected.&nbsp;Please&nbsp;check&nbsp;it&nbsp;!</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;53</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;54</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;55</span>&nbsp;<span style="color: #000000; ">function&nbsp;init<br /></span><span style="color: #008080; ">&nbsp;56</span>&nbsp;<span style="color: #000000; ">{<br /></span><span style="color: #008080; ">&nbsp;57</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;src_dir&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;${SRC_DIR_ARRAY[</span><span style="color: #000000; ">*</span><span style="color: #000000; ">]}<br /></span><span style="color: #008080; ">&nbsp;58</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;do<br /></span><span style="color: #008080; ">&nbsp;59</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;!&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">d&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$src_dir</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;]<br /></span><span style="color: #008080; ">&nbsp;60</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;then<br /></span><span style="color: #008080; ">&nbsp;61</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echoNote<br /></span><span style="color: #008080; ">&nbsp;62</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">SRC_DIR_ARRAY:&nbsp;'$src_dir'</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;63</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit<br /></span><span style="color: #008080; ">&nbsp;64</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br /></span><span style="color: #008080; ">&nbsp;65</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;done<br /></span><span style="color: #008080; ">&nbsp;66</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;67</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">if</span><span style="color: #000000; ">&nbsp;[&nbsp;!&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">d&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$OUTPUT</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;]<br /></span><span style="color: #008080; ">&nbsp;68</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;then<br /></span><span style="color: #008080; ">&nbsp;69</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echoNote<br /></span><span style="color: #008080; ">&nbsp;70</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">OUTPUT:&nbsp;'$OUTPUT'</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;71</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit<br /></span><span style="color: #008080; ">&nbsp;72</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;fi<br /></span><span style="color: #008080; ">&nbsp;73</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080; ">&nbsp;74</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">rf&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$OUTPUT</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;75</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$OUTPUT</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;76</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;77</span>&nbsp;<span style="color: #000000; ">}<br /></span><span style="color: #008080; ">&nbsp;78</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;79</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;80</span>&nbsp;<span style="color: #000000; ">echo&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">e&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">----------------------------BEGIN--------------------------------\n</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;81</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;82</span>&nbsp;<span style="color: #000000; ">init<br /></span><span style="color: #008080; ">&nbsp;83</span>&nbsp;<span style="color: #000000; "></span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;src_dir&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;${SRC_DIR_ARRAY[</span><span style="color: #000000; ">*</span><span style="color: #000000; ">]}<br /></span><span style="color: #008080; ">&nbsp;84</span>&nbsp;<span style="color: #000000; ">do<br /></span><span style="color: #008080; ">&nbsp;85</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;86</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;cd&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$src_dir</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;87</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="color: #000000; ">=</span><span style="color: #000000; ">`find&nbsp;.&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">type&nbsp;f&nbsp;</span><span style="color: #000000; ">|</span><span style="color: #000000; ">&nbsp;xargs&nbsp;grep&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">l&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$SEARCH_WORD</span><span style="color: #800000; ">"</span><span style="color: #000000; ">`<br /></span><span style="color: #008080; ">&nbsp;88</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">list=`find&nbsp;.&nbsp;-type&nbsp;f&nbsp;|&nbsp;xargs&nbsp;grep&nbsp;-il&nbsp;"$SEARCH_WORD"`&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;ignore&nbsp;case</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;89</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000FF; ">for</span><span style="color: #000000; ">&nbsp;line&nbsp;</span><span style="color: #0000FF; ">in</span><span style="color: #000000; ">&nbsp;$list<br /></span><span style="color: #008080; ">&nbsp;90</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;do<br /></span><span style="color: #008080; ">&nbsp;91</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;grep&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">Hn&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$SEARCH_WORD</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$line</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">&gt;&gt;</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$OUTPUT/log.txt</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;92</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">grep&nbsp;-iHn&nbsp;"$SEARCH_WORD"&nbsp;"$line"&nbsp;&gt;&gt;&nbsp;"$OUTPUT/log.txt"&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;ignore&nbsp;case</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;93</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count</span><span style="color: #000000; ">=</span><span style="color: #000000; ">count</span><span style="color: #000000; ">+</span><span style="color: #000000; ">1</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;94</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$line<br /></span><span style="color: #008080; ">&nbsp;95</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;replaceFile&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">$line</span><span style="color: #800000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">s/$SEARCH_WORD/$REPLACE_WORD/g</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;96</span>&nbsp;<span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000; ">#</span><span style="color: #008000; ">replaceFile&nbsp;"$line"&nbsp;"s/$SEARCH_WORD/$REPLACE_WORD/Ig"&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;ignore&nbsp;case</span><span style="color: #008000; "><br /></span><span style="color: #008080; ">&nbsp;97</span>&nbsp;<span style="color: #008000; "></span><span style="color: #000000; ">&nbsp;&nbsp;&nbsp;&nbsp;done<br /></span><span style="color: #008080; ">&nbsp;98</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">&nbsp;99</span>&nbsp;<span style="color: #000000; ">done<br /></span><span style="color: #008080; ">100</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">101</span>&nbsp;<span style="color: #000000; ">echo&nbsp;</span><span style="color: #000000; ">-</span><span style="color: #000000; ">e&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">\n----------summary----------</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">102</span>&nbsp;<span style="color: #000000; ">echo&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">total&nbsp;files&nbsp;size:&nbsp;$count</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">103</span>&nbsp;<span style="color: #000000; "><br /></span><span style="color: #008080; ">104</span>&nbsp;<span style="color: #000000; ">echo&nbsp;</span><span style="color: #800000; ">"</span><span style="color: #800000; ">----------------------------END--------------------------------</span><span style="color: #800000; ">"</span><span style="color: #000000; "><br /></span><span style="color: #008080; ">105</span>&nbsp;<span style="color: #000000; "></span></div><img src ="http://www.blogjava.net/Man/aggbug/370422.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-21 15:51 <a href="http://www.blogjava.net/Man/archive/2012/02/21/370422.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[demo]根据每行内容排序</title><link>http://www.blogjava.net/Man/archive/2012/02/19/370304.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Sun, 19 Feb 2012 14:02:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/19/370304.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/370304.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/19/370304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/370304.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/370304.html</trackback:ping><description><![CDATA[总体思路：<br />根据需求先求出每行排序条件的数量，排序，再把数字去掉<br /><br />1、根据每行字符串长度排序<br />例：<br />查询var下的所有内容，并根据每行的长度从小到大排序<br /><div><div>&nbsp;<span style="color: red;">find var | while read i; do echo ${#i} $i;done | sort -g | cut -d ' ' -f2</span></div></div>实现的方式不一而足，例如也可用awk统计长度，代码显得更紧凑点<br /><div>&nbsp;<span style="color: red;">find var | awk '{print length,$0}' | sort -g | cut -d ' ' -f2</span></div><img alt="" src="http://www.blogjava.net/images/blogjava_net/man/1.jpg" height="281" width="620" /><br /><br />2、根据每行的关键字数量排序<br />例：<br />查询var下的所有内容，并根据目录的深度逆序排序<br /><div>&nbsp;<span style="color: red;">find var | while read i; do echo `echo $i|grep -o '/'|wc -l` $i;done | sort -gr | cut -d ' ' -f2</span></div><br /><img alt="" src="http://www.blogjava.net/images/blogjava_net/man/2.jpg" height="286" width="645" /><img src ="http://www.blogjava.net/Man/aggbug/370304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-19 22:02 <a href="http://www.blogjava.net/Man/archive/2012/02/19/370304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SED单行脚本快速参考</title><link>http://www.blogjava.net/Man/archive/2012/02/14/369930.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Tue, 14 Feb 2012 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/14/369930.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/369930.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/14/369930.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/369930.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/369930.html</trackback:ping><description><![CDATA[<div>==sed实例介绍==<br />&nbsp;-------------------------------------------------------------------------<br />&nbsp;SED单行脚本快速参考（Unix 流编辑器）&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2005年12月29日<br />&nbsp;<br />&nbsp;英文标题：USEFUL ONE-LINE SCRIPTS FOR SED (Unix stream editor)<br />&nbsp;原标题：HANDY ONE-LINERS FOR SED (Unix stream editor)<br />&nbsp;<br />&nbsp;整理：Eric Pement&nbsp; - 电邮：pemente[at]northpark[dot]edu&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 版本5.5<br />&nbsp;译者：Joe Hong&nbsp;&nbsp;&nbsp;&nbsp; - 电邮：hq00e[at]126[dot]com<br />&nbsp;<br />&nbsp;在以下地址可找到本文档的最新（英文）版本：<br />&nbsp;&nbsp;&nbsp; http://sed.sourceforge.net/sed1line.txt<br />&nbsp;&nbsp;&nbsp; http://www.pement.org/sed/sed1line.txt<br />&nbsp;<br />&nbsp;其他语言版本：<br />&nbsp;&nbsp; 中文&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - http://sed.sourceforge.net/sed1line_zh-CN.html<br />&nbsp;&nbsp; 捷克语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - http://sed.sourceforge.net/sed1line_cz.html<br />&nbsp;&nbsp; 荷语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - http://sed.sourceforge.net/sed1line_nl.html<br />&nbsp;&nbsp; 法语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - http://sed.sourceforge.net/sed1line_fr.html<br />&nbsp;&nbsp; 德语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - http://sed.sourceforge.net/sed1line_de.html<br />&nbsp;<br />&nbsp;&nbsp; 葡语&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; - http://sed.sourceforge.net/sed1line_pt-BR.html<br />&nbsp;<br />&nbsp;<br />&nbsp;文本间隔：<br />&nbsp;--------<br />&nbsp;<br />&nbsp; # 在每一行后面增加一空行<br />&nbsp; sed G<br />&nbsp;<br />&nbsp; # 将原来的所有空行删除并在每一行后面增加一空行。<br />&nbsp; # 这样在输出的文本中每一行后面将有且只有一空行。<br />&nbsp; sed '/^$/d;G'<br />&nbsp;<br />&nbsp; # 在每一行后面增加两行空行<br />&nbsp; sed 'G;G'<br />&nbsp;<br />&nbsp; # 将第一个脚本所产生的所有空行删除（即删除所有偶数行）<br />&nbsp; sed 'n;d'<br />&nbsp;<br />&nbsp; # 在匹配式样&#8220;regex&#8221;的行之前插入一空行<br />&nbsp; sed '/regex/{x;p;x;}'<br />&nbsp;<br />&nbsp; # 在匹配式样&#8220;regex&#8221;的行之后插入一空行<br />&nbsp; sed '/regex/G'<br />&nbsp;<br />&nbsp; # 在匹配式样&#8220;regex&#8221;的行之前和之后各插入一空行<br />&nbsp; sed '/regex/{x;p;x;G;}'<br />&nbsp;<br />&nbsp;编号：<br />&nbsp;--------<br />&nbsp;<br />&nbsp; # 为文件中的每一行进行编号（简单的左对齐方式）。这里使用了&#8220;制表符&#8221;<br />&nbsp; # （tab，见本文末尾关于'\t'的用法的描述）而不是空格来对齐边缘。<br />&nbsp; sed = filename | sed 'N;s/\n/\t/'<br />&nbsp;<br />&nbsp; # 对文件中的所有行编号（行号在左，文字右端对齐）。<br />&nbsp; sed = filename | sed 'N; s/^/&nbsp;&nbsp;&nbsp;&nbsp; /; s/ *\(.\{6,\}\)\n/\1&nbsp; /'<br />&nbsp;<br />&nbsp; # 对文件中的所有行编号，但只显示非空白行的行号。<br />&nbsp; sed '/./=' filename | sed '/./N; s/\n/ /'<br />&nbsp;<br />&nbsp; # 计算行数 （模拟 "wc -l"）<br />&nbsp; sed -n '$='<br />&nbsp;<br />&nbsp;文本转换和替代：<br />&nbsp;--------<br />&nbsp;<br />&nbsp; # Unix环境：转换DOS的新行符（CR/LF）为Unix格式。<br />&nbsp; sed 's/.$//'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 假设所有行以CR/LF结束<br />&nbsp; sed 's/^M$//'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 在bash/tcsh中，将按Ctrl-M改为按Ctrl-V<br />&nbsp; sed 's/\x0D$//'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # ssed、gsed 3.02.80，及更高版本<br />&nbsp;<br />&nbsp; # Unix环境：转换Unix的新行符（LF）为DOS格式。<br />&nbsp; sed "s/$/`echo -e \\\r`/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 在ksh下所使用的命令<br />&nbsp; sed 's/$'"/`echo \\\r`/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 在bash下所使用的命令<br />&nbsp; sed "s/$/`echo \\\r`/"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 在zsh下所使用的命令<br />&nbsp; sed 's/$/\r/'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # gsed 3.02.80 及更高版本<br />&nbsp;<br />&nbsp; # DOS环境：转换Unix新行符（LF）为DOS格式。<br />&nbsp; sed "s/$//"&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法 1<br />&nbsp; sed -n p&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法 2<br />&nbsp;<br />&nbsp; # DOS环境：转换DOS新行符（CR/LF）为Unix格式。<br />&nbsp; # 下面的脚本只对UnxUtils sed 4.0.7 及更高版本有效。要识别UnxUtils版本的<br />&nbsp; #&nbsp; sed可以通过其特有的&#8220;--text&#8221;选项。你可以使用帮助选项（&#8220;--help&#8221;）看<br />&nbsp; # 其中有无一个&#8220;--text&#8221;项以此来判断所使用的是否是UnxUtils版本。其它DOS<br />&nbsp; # 版本的的sed则无法进行这一转换。但可以用&#8220;tr&#8221;来实现这一转换。<br />&nbsp; sed "s/\r//" infile &gt;outfile&nbsp;&nbsp;&nbsp;&nbsp; # UnxUtils sed v4.0.7 或更高版本<br />&nbsp; tr -d \r &lt;infile &gt;outfile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # GNU tr 1.22 或更高版本<br />&nbsp;<br />&nbsp; # 将每一行前导的&#8220;空白字符&#8221;（空格，制表符）删除<br />&nbsp; # 使之左对齐<br />&nbsp; sed 's/^[ \t]*//'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 见本文末尾关于'\t'用法的描述<br />&nbsp;<br />&nbsp; # 将每一行拖尾的&#8220;空白字符&#8221;（空格，制表符）删除<br />&nbsp; sed 's/[ \t]*$//'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 见本文末尾关于'\t'用法的描述<br />&nbsp;<br />&nbsp; # 将每一行中的前导和拖尾的空白字符删除<br />&nbsp; sed 's/^[ \t]*//;s/[ \t]*$//'<br />&nbsp;<br />&nbsp; # 在每一行开头处插入5个空格（使全文向右移动5个字符的位置）<br />&nbsp; sed 's/^/&nbsp;&nbsp;&nbsp;&nbsp; /'<br />&nbsp;<br />&nbsp; # 以79个字符为宽度，将所有文本右对齐<br />&nbsp; sed -e :a -e 's/^.\{1,78\}$/ &amp;/;ta'&nbsp; # 78个字符外加最后的一个空格<br />&nbsp;<br />&nbsp; # 以79个字符为宽度，使所有文本居中。在方法1中，为了让文本居中每一行的前<br />&nbsp; # 头和后头都填充了空格。 在方法2中，在居中文本的过程中只在文本的前面填充<br />&nbsp; # 空格，并且最终这些空格将有一半会被删除。此外每一行的后头并未填充空格。<br />&nbsp; sed&nbsp; -e :a -e 's/^.\{1,77\}$/ &amp; /;ta'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed&nbsp; -e :a -e 's/^.\{1,77\}$/ &amp;/;ta' -e 's/\( *\)\1/\1/'&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 在每一行中查找字串&#8220;foo&#8221;，并将找到的&#8220;foo&#8221;替换为&#8220;bar&#8221;<br />&nbsp; sed 's/foo/bar/'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只替换每一行中的第一个&#8220;foo&#8221;字串<br />&nbsp; sed 's/foo/bar/4'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只替换每一行中的第四个&#8220;foo&#8221;字串<br />&nbsp; sed 's/foo/bar/g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 将每一行中的所有&#8220;foo&#8221;都换成&#8220;bar&#8221;<br />&nbsp; sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # 替换倒数第二个&#8220;foo&#8221;<br />&nbsp; sed 's/\(.*\)foo/\1bar/'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 替换最后一个&#8220;foo&#8221;<br />&nbsp;<br />&nbsp; # 只在行中出现字串&#8220;baz&#8221;的情况下将&#8220;foo&#8221;替换成&#8220;bar&#8221;<br />&nbsp; sed '/baz/s/foo/bar/g'<br />&nbsp;<br />&nbsp; # 将&#8220;foo&#8221;替换成&#8220;bar&#8221;，并且只在行中未出现字串&#8220;baz&#8221;的情况下替换<br />&nbsp; sed '/baz/!s/foo/bar/g'<br />&nbsp;<br />&nbsp; # 不管是&#8220;scarlet&#8221;&#8220;ruby&#8221;还是&#8220;puce&#8221;，一律换成&#8220;red&#8221;<br />&nbsp; sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g'&nbsp; #对多数的sed都有效<br />&nbsp; gsed 's/scarlet\|ruby\|puce/red/g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只对GNU sed有效<br />&nbsp;<br />&nbsp; # 倒置所有行，第一行成为最后一行，依次类推（模拟&#8220;tac&#8221;）。<br />&nbsp; # 由于某些原因，使用下面命令时HHsed v1.5会将文件中的空行删除<br />&nbsp; sed '1!G;h;$!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed -n '1!G;h;$p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 将行中的字符逆序排列，第一个字成为最后一字，&#8230;&#8230;（模拟&#8220;rev&#8221;）<br />&nbsp; sed '/\n/!G;s/\(.\)\(.*\n\)/&amp;\2\1/;//D;s/.//'<br />&nbsp;<br />&nbsp; # 将每两行连接成一行（类似&#8220;paste&#8221;）<br />&nbsp; sed '$!N;s/\n/ /'<br />&nbsp;<br />&nbsp; # 如果当前行以反斜杠&#8220;\&#8221;结束，则将下一行并到当前行末尾<br />&nbsp; # 并去掉原来行尾的反斜杠<br />&nbsp; sed -e :a -e '/\\$/N; s/\\\n//; ta'<br />&nbsp;<br />&nbsp; # 如果当前行以等号开头，将当前行并到上一行末尾<br />&nbsp; # 并以单个空格代替原来行头的&#8220;=&#8221;<br />&nbsp; sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'<br />&nbsp;<br />&nbsp; # 为数字字串增加逗号分隔符号，将&#8220;1234567&#8221;改为&#8220;1,234,567&#8221;<br />&nbsp; gsed ':a;s/\B[0-9]\{3\}\&gt;/,&amp;/;ta'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # GNU sed<br />&nbsp; sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta'&nbsp; # 其他sed<br />&nbsp;<br />&nbsp; # 为带有小数点和负号的数值增加逗号分隔符（GNU sed）<br />&nbsp; gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'<br />&nbsp;<br />&nbsp; # 在每5行后增加一空白行 （在第5，10，15，20，等行后增加一空白行）<br />&nbsp; gsed '0~5G'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只对GNU sed有效<br />&nbsp; sed 'n;n;n;n;G;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 其他sed<br />&nbsp;<br />&nbsp;选择性地显示特定行：<br />&nbsp;--------<br />&nbsp;<br />&nbsp; # 显示文件中的前10行 （模拟&#8220;head&#8221;的行为）<br />&nbsp; sed 10q<br />&nbsp;<br />&nbsp; # 显示文件中的第一行 （模拟&#8220;head -1&#8221;命令）<br />&nbsp; sed q<br />&nbsp;<br />&nbsp; # 显示文件中的最后10行 （模拟&#8220;tail&#8221;）<br />&nbsp; sed -e :a -e '$q;N;11,$D;ba'<br />&nbsp;<br />&nbsp; # 显示文件中的最后2行（模拟&#8220;tail -2&#8221;命令）<br />&nbsp; sed '$!N;$!D'<br />&nbsp;<br />&nbsp; # 显示文件中的最后一行（模拟&#8220;tail -1&#8221;）<br />&nbsp; sed '$!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed -n '$p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 显示文件中的倒数第二行<br />&nbsp; sed -e '$!{h;d;}' -e x&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 当文件中只有一行时，输入空行<br />&nbsp; sed -e '1{$q;}' -e '$!{h;d;}' -e x&nbsp; # 当文件中只有一行时，显示该行<br />&nbsp; sed -e '1{$d;}' -e '$!{h;d;}' -e x&nbsp; # 当文件中只有一行时，不输出<br />&nbsp;<br />&nbsp; # 只显示匹配正则表达式的行（模拟&#8220;grep&#8221;）<br />&nbsp; sed -n '/regexp/p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed '/regexp/!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 只显示&#8220;不&#8221;匹配正则表达式的行（模拟&#8220;grep -v&#8221;）<br />&nbsp; sed -n '/regexp/!p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1，与前面的命令相对应<br />&nbsp; sed '/regexp/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2，类似的语法<br />&nbsp;<br />&nbsp; # 查找&#8220;regexp&#8221;并将匹配行的上一行显示出来，但并不显示匹配行<br />&nbsp; sed -n '/regexp/{g;1!p;};h'<br />&nbsp;<br />&nbsp; # 查找&#8220;regexp&#8221;并将匹配行的下一行显示出来，但并不显示匹配行<br />&nbsp; sed -n '/regexp/{n;p;}'<br />&nbsp;<br />&nbsp; # 显示包含&#8220;regexp&#8221;的行及其前后行，并在第一行之前加上&#8220;regexp&#8221;所<br />&nbsp; # 在行的行号 （类似&#8220;grep -A1 -B1&#8221;）<br />&nbsp; sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h<br />&nbsp;<br />&nbsp; # 显示包含&#8220;AAA&#8221;、&#8220;BBB&#8221;或&#8220;CCC&#8221;的行（任意次序）<br />&nbsp; sed '/AAA/!d; /BBB/!d; /CCC/!d'&nbsp; # 字串的次序不影响结果<br />&nbsp;<br />&nbsp; # 显示包含&#8220;AAA&#8221;、&#8220;BBB&#8221;和&#8220;CCC&#8221;的行（固定次序）<br />&nbsp; sed '/AAA.*BBB.*CCC/!d'<br />&nbsp;<br />&nbsp; # 显示包含&#8220;AAA&#8221;&#8220;BBB&#8221;或&#8220;CCC&#8221;的行 （模拟&#8220;egrep&#8221;）<br />&nbsp; sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d&nbsp;&nbsp;&nbsp; # 多数sed<br />&nbsp; gsed '/AAA\|BBB\|CCC/!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 对GNU sed有效<br />&nbsp;<br />&nbsp; # 显示包含&#8220;AAA&#8221;的段落 （段落间以空行分隔）<br />&nbsp; # HHsed v1.5 必须在&#8220;x;&#8221;后加入&#8220;G;&#8221;，接下来的3个脚本都是这样<br />&nbsp; sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'<br />&nbsp;<br />&nbsp; # 显示包含&#8220;AAA&#8221;&#8220;BBB&#8221;和&#8220;CCC&#8221;三个字串的段落 （任意次序）<br />&nbsp; sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'<br />&nbsp;<br />&nbsp; # 显示包含&#8220;AAA&#8221;、&#8220;BBB&#8221;、&#8220;CCC&#8221;三者中任一字串的段落 （任意次序）<br />&nbsp; sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d<br />&nbsp; gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只对GNU sed有效<br />&nbsp;<br />&nbsp; # 显示包含65个或以上字符的行<br />&nbsp; sed -n '/^.\{65\}/p'<br />&nbsp;<br />&nbsp; # 显示包含65个以下字符的行<br />&nbsp; sed -n '/^.\{65\}/!p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1，与上面的脚本相对应<br />&nbsp; sed '/^.\{65\}/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2，更简便一点的方法<br />&nbsp;<br />&nbsp; # 显示部分文本&#8212;&#8212;从包含正则表达式的行开始到最后一行结束<br />&nbsp; sed -n '/regexp/,$p'<br />&nbsp;<br />&nbsp; # 显示部分文本&#8212;&#8212;指定行号范围（从第8至第12行，含8和12行）<br />&nbsp; sed -n '8,12p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed '8,12!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 显示第52行<br />&nbsp; sed -n '52p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed '52!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2<br />&nbsp; sed '52q;d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法3, 处理大文件时更有效率<br />&nbsp;<br />&nbsp; # 从第3行开始，每7行显示一次&nbsp; &nbsp;<br />&nbsp; gsed -n '3~7p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只对GNU sed有效<br />&nbsp; sed -n '3,${p;n;n;n;n;n;n;}'&nbsp;&nbsp;&nbsp;&nbsp; # 其他sed<br />&nbsp;<br />&nbsp; # 显示两个正则表达式之间的文本（包含）<br />&nbsp; sed -n '/Iowa/,/Montana/p'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 区分大小写方式<br />&nbsp;<br />&nbsp;选择性地删除特定行：<br />&nbsp;--------<br />&nbsp;<br />&nbsp; # 显示通篇文档，除了两个正则表达式之间的内容<br />&nbsp; sed '/Iowa/,/Montana/d'<br />&nbsp;<br />&nbsp; # 删除文件中相邻的重复行（模拟&#8220;uniq&#8221;）<br />&nbsp; # 只保留重复行中的第一行，其他行删除<br />&nbsp; sed '$!N; /^\(.*\)\n\1$/!P; D'<br />&nbsp;<br />&nbsp; # 删除文件中的重复行，不管有无相邻。注意hold space所能支持的缓存<br />&nbsp; # 大小，或者使用GNU sed。<br />&nbsp; sed -n 'G; s/\n/&amp;&amp;/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'<br />&nbsp;<br />&nbsp; # 删除除重复行外的所有行（模拟&#8220;uniq -d&#8221;）<br />&nbsp; sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'<br />&nbsp;<br />&nbsp; # 删除文件中开头的10行<br />&nbsp; sed '1,10d'<br />&nbsp;<br />&nbsp; # 删除文件中的最后一行<br />&nbsp; sed '$d'<br />&nbsp;<br />&nbsp; # 删除文件中的最后两行<br />&nbsp; sed 'N;$!P;$!D;$d'<br />&nbsp;<br />&nbsp; # 删除文件中的最后10行<br />&nbsp; sed -e :a -e '$d;N;2,10ba' -e 'P;D'&nbsp;&nbsp; # 方法1<br />&nbsp; sed -n -e :a -e '1,10!{P;N;D;};N;ba'&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 删除8的倍数行<br />&nbsp; gsed '0~8d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 只对GNU sed有效<br />&nbsp; sed 'n;n;n;n;n;n;n;d;'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 其他sed<br />&nbsp;<br />&nbsp; # 删除匹配式样的行<br />&nbsp; sed '/pattern/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 删除含pattern的行。当然pattern<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 可以换成任何有效的正则表达式<br />&nbsp;<br />&nbsp; # 删除文件中的所有空行（与&#8220;grep '.' &#8221;效果相同）<br />&nbsp; sed '/^$/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法1<br />&nbsp; sed '/./!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 方法2<br />&nbsp;<br />&nbsp; # 只保留多个相邻空行的第一行。并且删除文件顶部和尾部的空行。<br />&nbsp; # （模拟&#8220;cat -s&#8221;）<br />&nbsp; sed '/./,/^$/!d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #方法1，删除文件顶部的空行，允许尾部保留一空行<br />&nbsp; sed '/^$/N;/\n$/D'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #方法2，允许顶部保留一空行，尾部不留空行<br />&nbsp;<br />&nbsp; # 只保留多个相邻空行的前两行。<br />&nbsp; sed '/^$/N;/\n$/N;//D'<br />&nbsp;<br />&nbsp; # 删除文件顶部的所有空行<br />&nbsp; sed '/./,$!d'<br />&nbsp;<br />&nbsp; # 删除文件尾部的所有空行<br />&nbsp; sed -e :a -e '/^\n*$/{$d;N;ba' -e '}'&nbsp; # 对所有sed有效<br />&nbsp; sed -e :a -e '/^\n*$/N;/\n$/ba'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 同上，但只对 gsed 3.02.*有效<br />&nbsp;<br />&nbsp; # 删除每个段落的最后一行<br />&nbsp; sed -n '/^$/{p;h;};/./{x;/./p;}'<br />&nbsp;<br />&nbsp;特殊应用：<br />&nbsp;--------<br />&nbsp;<br />&nbsp; # 移除手册页（man page）中的nroff标记。在Unix System V或bash shell下使<br />&nbsp; # 用'echo'命令时可能需要加上 -e 选项。<br />&nbsp; sed "s/.`echo \\\b`//g"&nbsp;&nbsp;&nbsp; # 外层的双括号是必须的（Unix环境）<br />&nbsp; sed 's/.^H//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 在bash或tcsh中, 按 Ctrl-V 再按 Ctrl-H<br />&nbsp; sed 's/.\x08//g'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # sed 1.5，GNU sed，ssed所使用的十六进制的表示方法<br />&nbsp;<br />&nbsp; # 提取新闻组或 e-mail 的邮件头<br />&nbsp; sed '/^$/q'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 删除第一行空行后的所有内容<br />&nbsp;<br />&nbsp; # 提取新闻组或 e-mail 的正文部分<br />&nbsp; sed '1,/^$/d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 删除第一行空行之前的所有内容<br />&nbsp;<br />&nbsp; # 从邮件头提取&#8220;Subject&#8221;（标题栏字段），并移除开头的&#8220;Subject:&#8221;字样<br />&nbsp; sed '/^Subject: */!d; s///;q'<br />&nbsp;<br />&nbsp; # 从邮件头获得回复地址<br />&nbsp; sed '/^Reply-To:/q; /^From:/h; /./d;g;q'<br />&nbsp;<br />&nbsp; # 获取邮件地址。在上一个脚本所产生的那一行邮件头的基础上进一步的将非电邮<br />&nbsp; # 地址的部分剃除。（见上一脚本）<br />&nbsp; sed 's/ *(.*)//; s/&gt;.*//; s/.*[:&lt;] *//'<br />&nbsp;<br />&nbsp; # 在每一行开头加上一个尖括号和空格（引用信息）<br />&nbsp; sed 's/^/&gt; /'<br />&nbsp;<br />&nbsp; # 将每一行开头处的尖括号和空格删除（解除引用）<br />&nbsp; sed 's/^&gt; //'<br />&nbsp;<br />&nbsp; # 移除大部分的HTML标签（包括跨行标签）<br />&nbsp; sed -e :a -e 's/&lt;[^&gt;]*&gt;//g;/&lt;/N;//ba'<br />&nbsp;<br />&nbsp; # 将分成多卷的uuencode文件解码。移除文件头信息，只保留uuencode编码部分。<br />&nbsp; # 文件必须以特定顺序传给sed。下面第一种版本的脚本可以直接在命令行下输入；<br />&nbsp; # 第二种版本则可以放入一个带执行权限的shell脚本中。（由Rahul Dhesi的一<br />&nbsp; # 个脚本修改而来。）<br />&nbsp; sed '/^end/,/^begin/d' file1 file2 ... fileX | uudecode&nbsp;&nbsp; # vers. 1<br />&nbsp; sed '/^end/,/^begin/d' "$@" | uudecode&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # vers. 2<br />&nbsp;<br />&nbsp; # 将文件中的段落以字母顺序排序。段落间以（一行或多行）空行分隔。GNU sed使用<br />&nbsp; # 字元&#8220;\v&#8221;来表示垂直制表符，这里用它来作为换行符的占位符&#8212;&#8212;当然你也可以<br />&nbsp; # 用其他未在文件中使用的字符来代替它。<br />&nbsp; sed '/./{H;d;};x;s/\n/={NL}=/g' file | sort | sed '1s/={NL}=//;s/={NL}=/\n/g'<br />&nbsp; gsed '/./{H;d};x;y/\n/\v/' file | sort | sed '1s/\v//;y/\v/\n/'<br />&nbsp;<br />&nbsp; # 分别压缩每个.TXT文件，压缩后删除原来的文件并将压缩后的.ZIP文件<br />&nbsp; # 命名为与原来相同的名字（只是扩展名不同）。（DOS环境：&#8220;dir /b&#8221;<br />&nbsp; # 显示不带路径的文件名）。<br />&nbsp; echo @echo off &gt;zipup.bat<br />&nbsp; dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" &gt;&gt;zipup.bat<br />&nbsp;<br />&nbsp;<br />&nbsp;使用SED：Sed接受一个或多个编辑命令，并且每读入一行后就依次应用这些命令。<br />&nbsp;当读入第一行输入后，sed对其应用所有的命令，然后将结果输出。接着再读入第二<br />&nbsp;行输入，对其应用所有的命令&#8230;&#8230;并重复这个过程。上一个例子中sed由标准输入设<br />&nbsp;备（即命令解释器，通常是以管道输入的形式）获得输入。在命令行给出一个或多<br />&nbsp;个文件名作为参数时，这些文件取代标准输入设备成为sed的输入。sed的输出将被<br />&nbsp;送到标准输出（显示器）。因此：<br />&nbsp;<br />&nbsp; cat filename | sed '10q'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 使用管道输入<br />&nbsp; sed '10q' filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 同样效果，但不使用管道输入<br />&nbsp; sed '10q' filename &gt; newfile&nbsp;&nbsp;&nbsp;&nbsp; # 将输出转移（重定向）到磁盘上<br />&nbsp;<br />&nbsp;要了解sed命令的使用说明，包括如何通过脚本文件（而非从命令行）来使用这些命<br />&nbsp;令，请参阅《sed &amp; awk》第二版，作者Dale Dougherty和Arnold Robbins<br />&nbsp;（O'Reilly，1997；http://www.ora.com），《UNIX Text Processing》，作者<br />&nbsp;Dale Dougherty和Tim O'Reilly（Hayden Books，1987）或者是Mike Arst写的教<br />&nbsp;程&#8212;&#8212;压缩包的名称是&#8220;U-SEDIT2.ZIP&#8221;（在许多站点上都找得到）。要发掘sed<br />&nbsp;的潜力，则必须对&#8220;正则表达式&#8221;有足够的理解。正则表达式的资料可以看<br />&nbsp;《Mastering Regular Expressions》作者Jeffrey Friedl（O'reilly 1997）。<br />&nbsp;Unix系统所提供的手册页（&#8220;man&#8221;）也会有所帮助（试一下这些命令<br />&nbsp;&#8220;man sed&#8221;、&#8220;man regexp&#8221;，或者看&#8220;man ed&#8221;中关于正则表达式的部分），但<br />&nbsp;手册提供的信息比较&#8220;抽象&#8221;&#8212;&#8212;这也是它一直为人所诟病的。不过，它本来就不<br />&nbsp;是用来教初学者如何使用sed或正则表达式的教材，而只是为那些熟悉这些工具的人<br />&nbsp;提供的一些文本参考。<br />&nbsp;<br />&nbsp;括号语法：前面的例子对sed命令基本上都使用单引号（'...'）而非双引号<br />&nbsp;（"..."）这是因为sed通常是在Unix平台上使用。单引号下，Unix的shell（命令<br />&nbsp;解释器）不会对美元符（$）和后引号（`...`）进行解释和执行。而在双引号下<br />&nbsp;美元符会被展开为变量或参数的值，后引号中的命令被执行并以输出的结果代替<br />&nbsp;后引号中的内容。而在&#8220;csh&#8221;及其衍生的shell中使用感叹号（!）时需要在其前<br />&nbsp;面加上转义用的反斜杠（就像这样：\!）以保证上面所使用的例子能正常运行<br />&nbsp;（包括使用单引号的情况下）。DOS版本的Sed则一律使用双引号（"..."）而不是<br />&nbsp;引号来圈起命令。<br />&nbsp;<br />&nbsp;'\t'的用法：为了使本文保持行文简洁，我们在脚本中使用'\t'来表示一个制表<br />&nbsp;符。但是现在大部分版本的sed还不能识别'\t'的简写方式，因此当在命令行中为<br />&nbsp;脚本输入制表符时，你应该直接按TAB键来输入制表符而不是输入'\t'。下列的工<br />&nbsp;具软件都支持'\t'做为一个正则表达式的字元来表示制表符：awk、perl、HHsed、<br />&nbsp;sedmod以及GNU sed v3.02.80。<br />&nbsp;<br />&nbsp;不同版本的SED：不同的版本间的sed会有些不同之处，可以想象它们之间在语法上<br />&nbsp;会有差异。具体而言，它们中大部分不支持在编辑命令中间使用标签（:name）或分<br />&nbsp;支命令（b,t），除非是放在那些的末尾。这篇文档中我们尽量选用了可移植性较高<br />&nbsp;的语法，以使大多数版本的sed的用户都能使用这些脚本。不过GNU版本的sed允许使<br />&nbsp;用更简洁的语法。想像一下当读者看到一个很长的命令时的心情：<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d<br />&nbsp;<br />&nbsp;好消息是GNU sed能让命令更紧凑：<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; sed '/AAA/b;/BBB/b;/CCC/b;d'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 甚至可以写成<br />&nbsp;&nbsp;&nbsp; sed '/AAA\|BBB\|CCC/b;d'<br />&nbsp;<br />&nbsp;此外，请注意虽然许多版本的sed接受象&#8220;/one/ s/RE1/RE2/&#8221;这种在's'前带有空<br />&nbsp;格的命令，但这些版本中有些却不接受这样的命令:&#8220;/one/! s/RE1/RE2/&#8221;。这时<br />&nbsp;只需要把中间的空格去掉就行了。<br />&nbsp;<br />&nbsp;速度优化：当由于某种原因（比如输入文件较大、处理器或硬盘较慢等）需要提高<br />&nbsp;命令执行速度时，可以考虑在替换命令（&#8220;s/.../.../&#8221;）前面加上地址表达式来<br />&nbsp;提高速度。举例来说：<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; sed 's/foo/bar/g' filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 标准替换命令<br />&nbsp;&nbsp;&nbsp; sed '/foo/ s/foo/bar/g' filename&nbsp;&nbsp; # 速度更快<br />&nbsp;&nbsp;&nbsp; sed '/foo/ s//bar/g' filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 简写形式<br />&nbsp;<br />&nbsp;当只需要显示文件的前面的部分或需要删除后面的内容时，可以在脚本中使用&#8220;q&#8221;<br />&nbsp;命令（退出命令）。在处理大的文件时，这会节省大量时间。因此：<br />&nbsp;<br />&nbsp;&nbsp;&nbsp; sed -n '45,50p' filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 显示第45到50行<br />&nbsp;&nbsp;&nbsp; sed -n '51q;45,50p' filename&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 一样，但快得多<br />&nbsp;<br />&nbsp;如果你有其他的单行脚本想与大家分享或者你发现了本文档中错误的地方，请发电<br />&nbsp;子邮件给本文档的作者（Eric Pement）。邮件中请记得提供你所使用的sed版本、<br />&nbsp;该sed所运行的操作系统及对问题的适当描述。本文所指的单行脚本指命令行的长<br />&nbsp;度在65个字符或65个以下的sed脚本〔译注1〕。本文档的各种脚本是由以下所列作<br />&nbsp;者所写或提供：<br />&nbsp;<br />&nbsp; Al Aab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 建立了&#8220;seders&#8221;邮件列表<br />&nbsp; Edgar Allen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 许多方面<br />&nbsp; Yiorgos Adamopoulos&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 许多方面<br />&nbsp; Dale Dougherty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 《sed &amp; awk》作者<br />&nbsp; Carlos Duarte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 《do it with sed》作者<br />&nbsp; Eric Pement&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 本文档的作者<br />&nbsp; Ken Pizzini&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # GNU sed v3.02 的作者<br />&nbsp; S.G. Ravenhall&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 去html标签脚本<br />&nbsp; Greg Ubben&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # 有诸多贡献并提供了许多帮助<br />&nbsp;-------------------------------------------------------------------------<br />&nbsp;<br />&nbsp;译注1：大部分情况下，sed脚本无论多长都能写成单行的形式（通过`-e'选项和`;'<br />&nbsp;号）&#8212;&#8212;只要命令解释器支持，所以这里说的单行脚本除了能写成一行还对长度有<br />&nbsp;所限制。因为这些单行脚本的意义不在于它们是以单行的形式出现。而是让用户能<br />&nbsp;方便地在命令行中使用这些紧凑的脚本才是其意义所在。</div><img src ="http://www.blogjava.net/Man/aggbug/369930.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-14 12:40 <a href="http://www.blogjava.net/Man/archive/2012/02/14/369930.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell sed命令详解 </title><link>http://www.blogjava.net/Man/archive/2012/02/14/369929.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Tue, 14 Feb 2012 04:39:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/14/369929.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/369929.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/14/369929.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/369929.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/369929.html</trackback:ping><description><![CDATA[<div><p>Table of Contents<br /> 1. Sed简介 <br /> 2. 定址 <br /> 3. Sed命令 <br /> 4. 选项 <br /> 5. 元字符集 <br /> 6. 实例 <br /> 7. 脚本</p> <p><strong>1. Sed简介</strong></p> <p>sed是一种在线编辑器，它一次处理一行内容。处理时，把当前处理的行存储在临时缓冲区中，称为&#8220;模式空间&#8221;（pattern space），接着用sed命令处理缓冲区中的内容，处理完成后，把缓冲区的内容送往屏幕。接着处理下一行，这样不断重复，直到文件末尾。文件内容并没有 改变，除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件；简化对文件的反复操作；编写转换程序等。以下介绍的是Gnu版本的Sed 3.02。<br /><span style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; background-color: #ffffff; ">PS:如果想直接修改源文件，可以用下面的命令(有些版本支持</span><span style="color: red; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; background-color: #ffffff; "><strong>-i</strong></span><span style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; background-color: #ffffff; ">命令直接改源文件)</span><br style="color: #4b4b4b; font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; " /><strong><span style="font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; background-color: yellow; ">sed&nbsp;&nbsp;</span><span style="background-color: yellow; ">-i</span><span style="font-family: georgia, verdana, Arial, helvetica, sans-seriff; font-size: 13px; line-height: 20px; background-color: yellow; ">&nbsp;'s/properties/property/g'&nbsp; build.xml</span></strong><br /></p> <p><br /> 2. 定址</p> <p>可以通过定址来定位你所希望编辑的行，该地址用数字构成，用逗号分隔的两个行数表示以这两行为起止的行的范围（包括行数表示的那两行）。如1，3表示1，2，3行，美元符号($)表示最后一行。范围可以通过数据，正则表达式或者二者结合的方式确定 。</p> <p><br /> 3. Sed命令</p> <p>调用sed命令有两种形式：</p> <p><br /> sed [options] 'command' file(s)</p> <p>sed [options] -f scriptfile file(s)</p> <p><br /> &lt; <br /> a/ <br /> 在当前行后面加入一行文本。</p> <p>b lable <br /> 分支到脚本中带有标记的地方，如果分支不存在则分支到脚本的末尾。</p> <p>c/ <br /> 用新的文本改变本行的文本。</p> <p>d <br /> 从模板块（Pattern space）位置删除行。</p> <p>D <br /> 删除模板块的第一行。</p> <p>i/ <br /> 在当前行上面插入文本。</p> <p>h <br /> 拷贝模板块的内容到内存中的缓冲区。</p> <p>H <br /> 追加模板块的内容到内存中的缓冲区</p> <p>g <br /> 获得内存缓冲区的内容，并替代当前模板块中的文本。</p> <p>G <br /> 获得内存缓冲区的内容，并追加到当前模板块文本的后面。</p> <p>l <br /> 列表不能打印字符的清单。</p> <p>n <br /> 读取下一个输入行，用下一个命令处理新的行而不是用第一个命令。</p> <p>N <br /> 追加下一个输入行到模板块后面并在二者间嵌入一个新行，改变当前行号码。</p> <p>p <br /> 打印模板块的行。</p> <p>P（大写） <br /> 打印模板块的第一行。</p> <p>q <br /> 退出Sed。</p> <p>r file <br /> 从file中读行。</p> <p>t label <br /> if分支，从最后一行开始，条件一旦满足或者T，t命令，将导致分支到带有标号的命令处，或者到脚本的末尾。</p> <p>T label <br /> 错误分支，从最后一行开始，一旦发生错误或者T，t命令，将导致分支到带有标号的命令处，或者到脚本的末尾。</p> <p>w file <br /> 写并追加模板块到file末尾。</p> <p>W file <br /> 写并追加模板块的第一行到file末尾。</p> <p>! <br /> 表示后面的命令对所有没有被选定的行发生作用。</p> <p>s/re/string <br /> 用string替换正则表达式re。</p> <p>= <br /> 打印当前行号码。</p> <p># <br /> 把注释扩展到下一个换行符以前。</p> <p>以下的是替换标记</p> <p>g表示行内全面替换。</p> <p>p表示打印行。</p> <p>w表示把行写入一个文件。</p> <p>x表示互换模板块中的文本和缓冲区中的文本。</p> <p>y表示把一个字符翻译为另外的字符（但是不用于正则表达式）</p> <p><br /> 4. 选项<br /> &lt; <br /> -e command, --expression=command <br /> 允许多台编辑。</p> <p>-h, --help <br /> 打印帮助，并显示bug列表的地址。</p> <p>-n, --quiet, --silent <br /> 取消默认输出。</p> <p>-f, --filer=script-file <br /> 引导sed脚本文件名。</p> <p>-V, --version <br /> 打印版本和版权信息。</p> <p><br /> 5. 元字符集<br /> &lt; <br /> ^ <br /> 锚定行的开始 如：/^sed/匹配所有以sed开头的行。</p> <p>$ <br /> 锚定行的结束 如：/sed$/匹配所有以sed结尾的行。</p> <p>. <br /> 匹配一个非换行符的字符 如：/s.d/匹配s后接一个任意字符，然后是d。</p> <p>* <br /> 匹配零或多个字符 如：/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。</p> <p>[] <br /> 匹配一个指定范围内的字符，如/[Ss]ed/匹配sed和Sed。</p> <p>[^] <br /> 匹配一个不在指定范围内的字符，如：/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头，紧跟ed的行。</p> <p>/(../) <br /> 保存匹配的字符，如s//(love/)able//1rs，loveable被替换成lovers。</p> <p>&amp; <br /> 保存搜索字符用来替换其他字符，如s/love/**&amp;**/，love这成**love**。</p> <p>/&lt; <br /> 锚定单词的开始，如://</p> <p>/&gt; <br /> 锚定单词的结束，如/love/&gt;/匹配包含以love结尾的单词的行。</p> <p>x/{m/} <br /> 重复字符x，m次，如：/0/{5/}/匹配包含5个o的行。</p> <p>x/{m,/} <br /> 重复字符x,至少m次，如：/o/{5,/}/匹配至少有5个o的行。</p> <p>x/{m,n/} <br /> 重复字符x，至少m次，不多于n次，如：/o/{5,10/}/匹配5--10个o的行。</p> <p>6. 实例<br /> 删除：d命令 <br /> $ sed '2d' example-----删除example文件的第二行。</p> <p>$ sed '2,$d' example-----删除example文件的第二行到末尾所有行。</p> <p>$ sed '$d' example-----删除example文件的最后一行。</p> <p>$ sed '/test/'d example-----删除example文件所有包含test的行。</p> <p>替换：s命令 <br /> $ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记，则只有每行第一个匹配的test被替换成mytest。</p> <p>$ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说，如果某一行开头的test被替换成mytest，就打印它。</p> <p>$ sed 's/^192.168.0.1/&amp;localhost/' example-----&amp;符号表示替换换字符串中被找到的部份。所有以192.168.0.1开头的行都会被替换成它自已加 localhost，变成192.168.0.1localhost。</p> <p>$ sed -n 's//(love/)able//1rs/p' example-----love被标记为1，所有loveable会被替换成lovers，而且替换的行会被打印出来。</p> <p>$ sed 's&lt;0&lt;00#g' example-----不论什么字符，紧跟着s命令的都被认为是新的分隔符，所以，&#8220;#&#8221;在这里是分隔符，代替了默认的&#8220;/&#8221;分隔符。表示把所有10替换成100。</p> <p>选定行的范围：逗号 <br /> $ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。</p> <p>$ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。</p> <p>$ sed '/test/,/check/s/$/sed test/' example-----对于模板test和west之间的行，每行的末尾用字符串sed test替换。</p> <p>多点编辑：e命令 <br /> $ sed -e '1,5d' -e 's/test/check/' example-----(-e)选项允许在同一行里执行多条命令。如例子所示，第一条命令删除1至5行，第二条命令用check替换test。命令的执 行顺序对结果有影响。如果两个命令都是替换命令，那么第一个替换命令将影响第二个替换命令的结果。</p> <p>$ sed --expression='s/test/check/' --expression='/love/d' example-----一个比-e更好的命令是--expression。它能给sed表达式赋值。</p> <p>从文件读入：r命令 <br /> $ sed '/test/r file' example-----file里的内容被读进来，显示在与test匹配的行后面，如果匹配多行，则file的内容将显示在所有匹配行的下面。</p> <p>写入文件：w命令 <br /> $ sed -n '/test/w file' example-----在example中所有包含test的行都被写入file里。</p> <p><br /> 追加命令：a命令 <br /> $ sed '/^test/a//---&gt;this is a example' example&lt;-----'this is a example'被追加到以test开头的行后面，sed要求命令a后面有一个反斜杠。</p> <p>插入：i命令 <br /> $ sed '/test/i//</p> <p>new line</p> <p>-------------------------' example</p> <p>如果test被匹配，则把反斜杠后面的文本插入到匹配行的前面。</p> <p>下一个：n命令 <br /> $ sed '/test/{ n; s/aa/bb/; }' example-----如果test被匹配，则移动到匹配行的下一行，替换这一行的aa，变为bb，并打印该行，然后继续。</p> <p>变形：y命令 <br /> $ sed '1,10y/abcde/ABCDE/' example-----把1--10行内所有abcde转变为大写，注意，正则表达式元字符不能使用这个命令。</p> <p>退出：q命令 <br /> $ sed '10q' example-----打印完第10行后，退出sed。</p> <p>保持和获取：h命令和G命令 <br /> $ sed -e '/test/h' -e '$G example-----在sed处理文件的时候，每一行都被保存在一个叫模式空间的临时缓冲区中，除非行被删除或者输出被取消，否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空，并存入新的一行等待处理。在这个例子里，匹配test的行被找到后，将存入模式空间，h命令将其复制并存入一个称为保 持缓存区的特殊缓冲区内。第二条语句的意思是，当到达最后一行后，G命令取出保持缓冲区的行，然后把它放回模式空间中，且追加到现在已经存在于模式空间中 的行的末尾。在这个例子中就是追加到最后一行。简单来说，任何包含test的行都被复制并追加到该文件的末尾。</p> <p>保持和互换：h命令和x命令 <br /> $ sed -e '/test/h' -e '/check/x' example -----互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换。</p> <p>7. 脚本<br /> Sed脚本是一个sed的命令清单，启动Sed时以-f选项引导脚本文件名。Sed对于脚本中输入的命令非常挑剔，在命令的末尾不能有任何空白或文本，如果在一行中有多个命令，要用分号分隔。以#开头的行为注释行，且不能跨行。</p> <p><br /> 比如，如果要打印出含有字串&#8221;1024&#8221;的行，我就可能会用：<br /> cat filename | sed &#8211;n &#8216;/1024/p&#8217;sed命令详解!!(要学习shell的 朋友要好好看看)</p></div><br />摘自：<div><a href="http://blog.csdn.net/dawnstar_hoo/article/details/4043887" target="_blank">http://blog.csdn.net/dawnstar_hoo/article/details/4043887</a></div><img src ="http://www.blogjava.net/Man/aggbug/369929.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-14 12:39 <a href="http://www.blogjava.net/Man/archive/2012/02/14/369929.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>文本处理命令:sort、uniq</title><link>http://www.blogjava.net/Man/archive/2012/02/14/369921.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Tue, 14 Feb 2012 03:29:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/14/369921.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/369921.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/14/369921.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/369921.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/369921.html</trackback:ping><description><![CDATA[<div><strong><span style="color: red;">sort命令</span></strong><br /> <br /> 　　sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项，这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上，sort命令可以被认为是一个非常强大的数据管理工具，用来管理内容类似数据库记录的文件。<br /> <br /> 　　Sort命令将逐行对文件中的内容进行排序，如果两行的首字符相同，该命令将继续比较这两行的下一字符，如果还相同，将继续进行比较。<br /> <br /> 　　语法：<br /> <br /> 　　sort ［选项］ 文件<br /> <br /> 　　说明：sort命令对指定文件中所有的行进行排序，并将结果显示在标准输出上。如不指定输入文件或使用&#8220;- &#8221;，则表示排序内容来自标准输入。<br /> <br /> 　　sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。<br /> <br /> 　　改变缺省设置的选项主要有：<br /> <br /> 　　- m 若给定文件已排好序，合并文件。<br /> <br /> 　　- c 检查给定文件是否已排好序，如果它们没有都排好序，则打印一个出错信息，并以状态值1退出。<br /> <br /> 　　- u 对排序后认为相同的行只留其中一行。<br /> <br /> 　　- o 输出文件 将排序输出写到输出文件中而不是标准输出，如果输出文件是输入文件之一，sort先将该文件的内容写入一个临时文件，然后再排序和写输出结果。<br /> <br /> 　　改变缺省排序规则的选项主要有：<br /> <br /> 　　- d 按字典顺序排序，比较时仅字母、数字、空格和制表符有意义。<br /> <br /> 　　- f 将小写字母与大写字母同等对待。<br /> <br /> 　　- I 忽略非打印字符。<br /> <br /> 　　- M 作为月份比较：&#8220;JAN&#8221;&lt;&#8220;FEB&#8221;&lt;&#188; &lt;&#8220;DEC&#8221;。<br /> <br /> 　　- r 按逆序输出排序结果。<br /> <br /> 　　＋posl - pos2 指定一个或几个字段作为排序关键字，字段位置从posl开始，到pos2为止（包括posl，不包括pos2）。如不指定pos2，则关键字为从posl到行尾。字段和字符的位置从0开始。<br /> <br /> 　　- b 在每行中寻找排序关键字时忽略前导的空白（空格和制表符）。<br /> <br /> 　　- t separator 指定字符separator作为字段分隔符。<br /> <br /> 　　下面通过几个例子来讲述sort的使用。<br /> <br /> <br /> 　　用sort命令对text文件中各行排序后输出其结果。请注意，在原文件的第二、三行上的第一个单词完全相同，该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。<br /> <br /> 　　$ cat text<br /> <br /> 　　vegetable soup<br /> <br /> 　　fresh vegetables<br /> <br /> 　　fresh fruit<br /> <br /> 　　lowfat milk<br /> <br /> 　　$ sort text<br /> <br /> 　　fresh fruit<br /> 　<br /> 　　fresh vegetables<br /> <br /> 　　lowfat milk<br /> <br /> 　　vegetable soup<br /> <br /> 　　用户可以保存排序后的文件内容，或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。<br /> <br /> 　　$ sort text&gt;result<br /> <br /> <br /> 　　以第2个字段作为排序关键字对文件example的内容进行排序。<br /> <br /> 　　$ sort +1-2 example<br /> <br /> <br /> 　　对于file1和file2文件内容反向排序，结果放在outfile中，利用第2个字段的第一个字符作为排序关键字。<br /> <br /> 　　$ sort -r -o outfile +1.0 -1.1 example<br /> <br /> <br /> 　　sort排序常用于在管道中与其他命令连用，组合完成比较复杂的功能，如利用管道将当前工作目录中的文件送给sort进行排序，排序关键字是第6个至第8个字段。<br /> <br /> 　　$ ls - l | sort +5 - 7<br /> <br /> 　　sort命令也可以对标准输入进行操作。例如，如果您想把几个文件文本行合并，并对合并后的文本行进行排序，您可以首先用命令cat把多个文件合并， 然后用管道操作把合并后的文本行输入给命令sort，sort命令将输出这些合并及排序后的文本行。在下面的例子中，文件veglist与文件 fruitlist的文本行经过合并与排序后被保存到文件clist中。<br /> <br /> 　　$ cat veglist fruitlist | sort &gt; clist<br /> <br /> <br /> <strong style="color: red;">uniq命令</strong><br style="color: red;" /> <br /> 　　文件经过处理后在它的输出文件中可能会出现重复的行。例如，使用cat命令将两个文件合并后，再使用sort命令进行排序，就可能出现重复行。这时可以使用uniq命令将这些重复行从输出文件中删除，只留下每条记录的唯一样本。<br /> <br /> 　　语法：uniq ［选项］ 文件<br /> <br /> 　　说明：这个命令读取输入文件，并比较相邻的行。在正常情况下，第二个及以后更多个重复行将被删去，行比较是根据所用字符集的排序序列进行的。该命令加工后的结果写到输出文件中。输入文件和输出文件必须不同。如果输入文件用&#8220;- &#8221;表示，则从标准输入读取。<br /> <br /> 　　该命令各选项含义如下：、<br /> <br /> 　　- c 显示输出中，在每行行首加上本行在文件中出现的次数。它可取代- u和- d选项。<br /> <br /> 　　- d 只显示重复行。<br /> <br /> 　　- u 只显示文件中不重复的各行。<br /> <br /> 　　- n 前n个字段与每个字段前的空白一起被忽略。一个字段是一个非空格、非制表符的字符串，彼此由制表符和空格隔开（字段从0开始编号）。<br /> <br /> 　　+n 前n个字符被忽略，之前的字符被跳过（字符从0开始编号）。<br /> <br /> 　　- f n 与- n相同，这里n是字段数。<br /> <br /> 　　- s n 与＋n相同，这里n是字符数。<br /> <br /> 　　例如：<br /> <br /> 　　1. 显示文件example中不重复的行。<br /> <br /> 　　uniq - u example<br /> <br /> 　　2. 显示文件example中不重复的行，从第2个字段的第2个字符开始做比较。<br /> <br /> 　　uniq - u - 1 +1 example<br /><br /><br />摘自：<div><a target="_blank" href="http://www.linuxsir.org/bbs/showthread.php?s=&amp;threadid=5110">http://www.linuxsir.org/bbs/showthread.php?s=&amp;threadid=5110</a></div></div><img src ="http://www.blogjava.net/Man/aggbug/369921.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-14 11:29 <a href="http://www.blogjava.net/Man/archive/2012/02/14/369921.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>shell cut用法  </title><link>http://www.blogjava.net/Man/archive/2012/02/08/369607.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Wed, 08 Feb 2012 08:28:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/08/369607.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/369607.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/08/369607.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/369607.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/369607.html</trackback:ping><description><![CDATA[<div><p>cut是以每一行为一个处理对象的，这种机制和sed是一样的。</p>  <p>2 cut一般以什么为依据呢? 也就是说，我怎么告诉cut我想定位到的剪切内容呢?</p>  <p>cut命令主要是接受三个定位方法：</p>  <p>第一，字节（bytes），用选项-b</p>  <p>第二，字符（characters），用选项-c</p>  <p>第三，域（fields），用选项-f</p>  <p>3 以&#8220;字节&#8221;定位，给个最简单的例子?</p>  <p>举个例子吧，当你执行ps命令时，会输出类似如下的内容：<br />[rocrocket@rocrocket programming]$ who<br />rocrocket :0 2009-01-08 11:07<br />rocrocket pts/0 2009-01-08 11:23 (:0.0)<br />rocrocket pts/1 2009-01-08 14:15 (:0.0)</p>  <p>如果我们想提取每一行的第3个字节，就这样：<br />[rocrocket@rocrocket programming]$ who|cut -b 3<br />c<br />c<br />c</p>  <p>看明白了吧，-b后面可以设定要提取哪一个字节，其实-b和3之间没有空格也是可以的，但推荐有空格:)</p>  <p>4 如果&#8220;字节&#8221;定位中，我想提取第3，第4、第5和第8个字节，怎么办?</p>  <p>-b支持形如3-5的写法，而且多个定位之间用逗号隔开就成了。看看例子吧：<br />[rocrocket@rocrocket programming]$ who|cut -b 3-5,8<br />croe<br />croe<br />croe</p>  <p>但有一点要注意，cut命令如果使用了-b选项，那么执行此命令时，cut会先把-b后面所有的定位进行从小到大排序，然后再提取。可不能颠倒定位的顺序哦。这个例子就可以说明这个问题：<br />[rocrocket@rocrocket programming]$ who|cut -b 8,3-5<br />croe<br />croe<br />croe</p>  <p>5 还有哪些类似&#8220;3-5&#8221;这样的小技巧，列举一下吧!<br />[rocrocket@rocrocket programming]$ who<br />rocrocket :0 2009-01-08 11:07<br />rocrocket pts/0 2009-01-08 11:23 (:0.0)<br />rocrocket pts/1 2009-01-08 14:15 (:0.0)<br />[rocrocket@rocrocket programming]$ who|cut -b -3<br />roc<br />roc<br />roc<br />[rocrocket@rocrocket programming]$ who|cut -b 3-<br />crocket :0 2009-01-08 11:07<br />crocket pts/0 2009-01-08 11:23 (:0.0)<br />crocket pts/1 2009-01-08 14:15 (:0.0)</p>  <p>想必你也看到了，-3表示从第一个字节到第三个字节，而3-表示从第三个字节到行尾。如果你细心，你可以看到这两种情况下，都包括了第三个字节&#8220;c&#8221;。<br />如果我执行who|cut -b -3,3-，你觉得会如何呢？答案是输出整行，不会出现连续两个重叠的c的。看：<br />[rocrocket@rocrocket programming]$ who|cut -b -3,3-<br />rocrocket :0 2009-01-08 11:07<br />rocrocket pts/0 2009-01-08 11:23 (:0.0)<br />rocrocket pts/1 2009-01-08 14:15 (:0.0)</p>  <p>6 给个以字符为定位标志的最简单的例子吧!</p>  <p>下面例子你似曾相识，提取第3，第4，第5和第8个字符：<br />[rocrocket@rocrocket programming]$ who|cut -c 3-5,8<br />croe<br />croe<br />croe</p>  <p>不过，看着怎么和-b没有什么区别啊？莫非-b和-c作用一样? 其实不然，看似相同，只是因为这个例子举的不好，who输出的都是单字节字符，所以用-b和-c没有区别，如果你提取中文，区别就看出来了，来，看看中文提取的情况：<br />[rocrocket@rocrocket programming]$ cat cut_ch.txt<br />星期一<br />星期二<br />星期三<br />星期四<br />[rocrocket@rocrocket programming]$ cut -b 3 cut_ch.txt<br />?<br />?<br />?<br />?<br />[rocrocket@rocrocket programming]$ cut -c 3 cut_ch.txt<br />一<br />二<br />三<br />四</p>  <p>看到了吧，用-c则会以字符为单位，输出正常；而-b只会傻傻的以字节（8位二进制位）来计算，输出就是乱码。<br />既然提到了这个知识点，就再补充一句，如果你学有余力，就提高一下。<br />当遇到多字节字符时，可以使用-n选项，-n用于告诉cut不要将多字节字符拆开。例子如下：<br />[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -b 2<br />?<br />?<br />?<br />?<br />[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 2<br /><br />[rocrocket@rocrocket programming]$ cat cut_ch.txt |cut -nb 1,2,3<br />星<br />星<br />星<br />星</p>  <p>6 域是怎么回事呢？解释解释:)</p>  <p>为什么会有&#8220;域&#8221;的提取呢，因为刚才提到的-b和-c只能在固定格式的文档中提取信息，而对于非固定格式的信息则束手无策。这时候&#8220;域&#8221;就派上用场了。</p>  <p>（下面的讲解内容是在假设你对/etc/passwd文件的内容和组织形式比较了解的情况下进行的。）</p>  <p>如果你观察过/etc/passwd文件，你会发现，它并不像who的输出信息那样具有固定格式，而是比较零散的排放。但是，冒号在这个文件的每一行中都起到了非常重要的作用，冒号用来隔开每一个项。</p>  <p>我们很幸运，cut命令提供了这样的提取方式，具体的说就是设置&#8220;间隔符&#8221;，再设置&#8220;提取第几个域&#8221;，就OK了！</p>  <p>以/etc/passwd的前五行内容为例：<br />[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5<br />root:x:0:0:root:/root:/bin/bash<br />bin:x:1:1:bin:/bin:/sbin/nologin<br />daemon:x:2:2:daemon:/sbin:/sbin/nologin<br />adm:x:3:4:adm:/var/adm:/sbin/nologin<br />lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin<br />[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1<br />root<br />bin<br />daemon<br />adm<br />lp</p>  <p>看到了吧，用-d来设置间隔符为冒号，然后用-f来设置我要取的是第一个域，再按回车，所有的用户名就都列出来了！呵呵 有成就感吧！<br />当然，在设定-f时，也可以使用例如3-5或者4-类似的格式：<br />[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5<br />root:0:0:root<br />bin:1:1:bin<br />daemon:2:2:daemon<br />adm:3:4:adm<br />lp:4:7:lp<br />[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f 1,3-5,7<br />root:0:0:root:/bin/bash<br />bin:1:1:bin:/sbin/nologin<br />daemon:2:2:daemon:/sbin/nologin<br />adm:3:4:adm:/sbin/nologin<br />lp:4:7:lp:/sbin/nologin<br />[rocrocket@rocrocket programming]$ cat /etc/passwd|head -n 5|cut -d : -f -2<br />root:x<br />bin:x<br />daemon:x<br />adm:x<br />lp:x</p>  <p>7 如果遇到空格和制表符时，怎么分辨呢？我觉得有点乱，怎么办？</p>  <p>有时候制表符确实很难辨认，有一个方法可以看出一段空格到底是由若干个空格组成的还是由一个制表符组成的。<br />[rocrocket@rocrocket programming]$ cat tab_space.txt<br />this is tab&nbsp;&nbsp;&nbsp; finish.<br />this is several space finish.<br />[rocrocket@rocrocket programming]$ sed -n l tab_space.txt<br />this is tab\tfinish.$<br />this is several space finish.$</p>  <p>看到了吧，如果是制表符（TAB），那么会显示为\t符号，如果是空格，就会原样显示。<br />通过此方法即可以判断制表符和空格了。<br />注意，上面sed -n后面的字符是L的小写字母哦，不要看错。（字母l、数字1还有或运算｜真是难分辨啊&#8230;，看来这三个比制表符还难分辨&#8230;）</p>  <p>8 我应该在cut -d中用什么符号来设定制表符或空格呢?</p>  <p>悄悄的告诉你，cut的-d选项的默认间隔符就是制表符，所以当你就是要使用制表符的时候，完全就可以省略-d选项，而直接用－f来取域就可以了！放心，相信我！<br />如果你设定一个空格为间隔符，那么就这样：<br />[rocrocket@rocrocket programming]$ cat tab_space.txt |cut -d ' ' -f 1<br />this<br />this</p>  <p>注意，两个单引号之间可确实要有一个空格哦，不能偷懒。<br />而且，你只能在-d后面设置一个空格，可不许设置多个空格，因为cut只允许间隔符是一个字符。<br />[rocrocket@rocrocket programming]$ cat tab_space.txt |cut -d ' ' -f 1<br />cut: the delimiter must be a single character<br />Try `cut --help' for more information.</p>  <p>9 我想将ps和cut命令配合使用时，怎么总是在最后两行出现重复现象？</p>  <p>这个问题的具体描述是如下这样的。<br />当cut和ps配合时：<br />[rocrocket@rocrocket programming]$ ps<br />PID TTY TIME CMD<br />2977 pts/0 00:00:00 bash<br />5032 pts/0 00:00:00 ps<br />[rocrocket@rocrocket programming]$ ps|cut -b3<br />P<br />9<br />0<br />0</p>  <p>看，最后的0重复了两次！！而且，我也试过ps ef或ps aux均有此问题。</p>  <p>而当ps和其他命令配合时，均无此问题，例如cut和who配合则正常：<br />[rocrocket@rocrocket programming]$ who<br />rocrocket :0 2009-01-08 11:07<br />rocrocket pts/0 2009-01-08 11:23 (:0.0)<br />rocrocket pts/1 2009-01-08 14:15 (:0.0)<br />[rocrocket@rocrocket programming]$ who|cut -b3<br />c<br />c<br />c</p>  <p>这个看似怪异的令我百思不得其解的问题，得到了sunway的解答，在此非常感谢他。我发问的原帖地址在［此处］。<br />其实这个问题是这样的，ps|cut会自身创建一个进程，所以当ps时也会提取出这个进程，然后通过管道输出到cut，所以cut截取后，就多出了一行，之所以会重复上一行内容，是由于我们恰巧取到了和上一行内容相同的字符而已。<br />你测试下执行ps和ps|cat就知道原因了！:)</p>  <p>10 cut有哪些缺陷和不足？</p>  <p>猜出来了吧？对，就是在处理多空格时。<br />如果文件里面的某些域是由若干个空格来间隔的，那么用cut就有点麻烦了，因为cut只擅长处理&#8220;以一个字符间隔&#8221;的文本内容</p></div><br />摘自：<div>http://hi.baidu.com/cunseve7n/blog/item/0863e5265cecb60a4c088db2.html</div><img src ="http://www.blogjava.net/Man/aggbug/369607.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-08 16:28 <a href="http://www.blogjava.net/Man/archive/2012/02/08/369607.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux-tar命令 </title><link>http://www.blogjava.net/Man/archive/2012/02/08/369596.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Wed, 08 Feb 2012 07:16:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/08/369596.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/369596.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/08/369596.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/369596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/369596.html</trackback:ping><description><![CDATA[<span style="background-color: yellow;">特殊应用举例：</span><br /><strong><span style="color: red;">带着目录一起拷贝</span></strong><br /><div><strong>tar -cvf - "com/hello/demo.java" | tar -C "d:/temp" -xvf -</strong></div>把当前&#8220;com/hello/&#8221;目录下的demo.java文件连着目录&#8220;com/hello/&#8221;一起拷贝到&#8220;d:/temp&#8221;目录下<br /><br /><br />正文：<br />[root@linux ~]# tar [-cxtzjvfpPN] 文件与目录 ....<br />参数：<br />-c ：建立一个压缩文件的参数指令(create 的意思)；<br />-x ：解开一个压缩文件的参数指令！<br />-t ：查看 tarfile 里面的文件！<br />特别注意，在参数的下达中， c/x/t 仅能存在一个！不可同时存在！<br />因为不可能同时压缩与解压缩。<br />-z ：是否同时具有 gzip 的属性？亦即是否需要用 gzip 压缩？<br />-j ：是否同时具有 bzip2 的属性？亦即是否需要用 bzip2 压缩？<br />-v ：压缩的过程中显示文件！这个常用，但不建议用在背景执行过程！<br />-f ：使用档名，请留意，在 f 之后要立即接档名喔！不要再加参数！<br />　　　例如使用『 tar -zcvfP tfile sfile』就是错误的写法，要写成<br />　　　『 tar -zcvPf tfile sfile』才对喔！<br />-p ：使用原文件的原来属性（属性不会依据使用者而变）<br />-P ：可以使用绝对路径来压缩！<br />-N ：比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中！<br />--exclude FILE：在压缩的过程中，不要将 FILE 打包！<br />范例：<br />范例一：将整个 /etc 目录下的文件全部打包成为 /tmp/etc.tar<br />[root@linux ~]# tar -cvf /tmp/etc.tar /etc &lt;==仅打包，不压缩！<br />[root@linux ~]# tar -zcvf /tmp/etc.tar.gz /etc &lt;==打包后，以 gzip 压缩<br />[root@linux ~]# tar -jcvf /tmp/etc.tar.bz2 /etc &lt;==打包后，以 bzip2 压缩<br /># 特别注意，在参数 f 之后的文件档名是自己取的，我们习惯上都用 .tar 来作为辨识。<br /># 如果加 z 参数，则以 .tar.gz 或 .tgz 来代表 gzip 压缩过的 tar file ～<br /># 如果加 j 参数，则以 .tar.bz2 来作为附档名啊～<br /># 上述指令在执行的时候，会显示一个警告讯息：<br /># 『tar: Removing leading `/' from member names』那是关於绝对路径的特殊设定。 <br />范例二：查阅上述 /tmp/etc.tar.gz 文件内有哪些文件？<br />[root@linux ~]# tar -ztvf /tmp/etc.tar.gz<br /># 由於我们使用 gzip 压缩，所以要查阅该 tar file 内的文件时，<br /># 就得要加上 z 这个参数了！这很重要的！<br /><br />范例三：将 /tmp/etc.tar.gz 文件解压缩在 /usr/local/src 底下<br />[root@linux ~]# cd /usr/local/src<br />[root@linux src]# tar -zxvf /tmp/etc.tar.gz<br /># 在预设的情况下，我们可以将压缩档在任何地方解开的！以这个范例来说，<br /># 我先将工作目录变换到 /usr/local/src 底下，并且解开 /tmp/etc.tar.gz ，<br /># 则解开的目录会在 /usr/local/src/etc 呢！另外，如果您进入 /usr/local/src/etc<br /># 则会发现，该目录下的文件属性与 /etc/ 可能会有所不同喔！<br /><br />范例四：在 /tmp 底下，我只想要将 /tmp/etc.tar.gz 内的 etc/passwd 解开而已<br />[root@linux ~]# cd /tmp<br />[root@linux tmp]# tar -zxvf /tmp/etc.tar.gz etc/passwd<br /># 我可以透过 tar -ztvf 来查阅 tarfile 内的文件名称，如果单只要一个文件，<br /># 就可以透过这个方式来下达！注意到！ etc.tar.gz 内的根目录 / 是被拿掉了！<br /><br />范例五：将 /etc/ 内的所有文件备份下来，并且保存其权限！<br />[root@linux ~]# tar -zxvpf /tmp/etc.tar.gz /etc<br /># 这个 -p 的属性是很重要的，尤其是当您要保留原本文件的属性时！<br /><br />范例六：在 /home 当中，比 2005/06/01 新的文件才备份<br />[root@linux ~]# tar -N '2005/06/01' -zcvf home.tar.gz /home<br /><br />范例七：我要备份 /home, /etc ，但不要 /home/dmtsai<br />[root@linux ~]# tar --exclude /home/dmtsai -zcvf myfile.tar.gz /home/* /etc<br /><br />范例八：将 /etc/ 打包后直接解开在 /tmp 底下，而不产生文件！<br />[root@linux ~]# cd /tmp<br />[root@linux tmp]# tar -cvf - /etc | tar -xvf -<br /># 这个动作有点像是 cp -r /etc /tmp 啦～依旧是有其有用途的！<br /># 要注意的地方在於输出档变成 - 而输入档也变成 - ，又有一个 | 存在～<br /># 这分别代表 standard output, standard input 与管线命令啦！<br /># 这部分我们会在 Bash shell 时，再次提到这个指令跟大家再解释啰！<br /><br /><br />&nbsp;<br />&nbsp;<br />gzip, zcat 命令 <br />[root@linux ~]# gzip [-cdt#] 档名<br />[root@linux ~]# zcat 档名.gz<br />参数：<br />-c ：将压缩的资料输出到萤幕上，可透过资料流重导向来处理；<br />-d ：解压缩的参数；<br />-t ：可以用来检验一个压缩档的一致性～看看文件有无错误；<br />-# ：压缩等级，-1 最快，但是压缩比最差、-9 最慢，但是压缩比最好！预设是 -6 ～<br />范例：<br />范例一：将 /etc/man.config 複制到 /tmp ，并且以 gzip 压缩<br />[root@linux ~]# cd /tmp<br />[root@linux tmp]# cp /etc/man.config .<br />[root@linux tmp]# gzip man.config<br /># 此时 man.config 会变成 man.config.gz ！ <br />范例二：将范例一的文件内容读出来！<br />[root@linux tmp]# zcat man.config.gz<br /># 此时萤幕上会显示 man.config.gz 解压缩之后的文件内容！！<br /><br />范例三：将范例一的文件解压缩<br />[root@linux tmp]# gzip -d man.config.gz<br /><br />范例四：将范例三解开的 man.config 用最佳的压缩比压缩，并保留原本的文件<br />[root@linux tmp]# gzip -9 -c man.config &gt; man.config.gz<br />&nbsp;<br />&nbsp;<br />bzip2, bzcat 命令 <br />[root@linux ~]# bzip2 [-cdz] 档名<br />[root@linux ~]# bzcat 档名.bz2<br />参数：<br />-c ：将压缩的过程产生的资料输出到萤幕上！<br />-d ：解压缩的参数<br />-z ：压缩的参数<br />-# ：与 gzip 同样的，都是在计算压缩比的参数， -9 最佳， -1 最快！<br />范例：<br />范例一：将刚刚的 /tmp/man.config 以 bzip2 压缩<br />[root@linux tmp]# bzip2 -z man.config<br /># 此时 man.config 会变成 man.config.bz2 ！ <br />范例二：将范例一的文件内容读出来！<br />[root@linux tmp]# bzcat man.config.bz2<br /># 此时萤幕上会显示 man.config.bz2 解压缩之后的文件内容！！<br /><br />范例三：将范例一的文件解压缩<br />[root@linux tmp]# bzip2 -d man.config.bz2<br /><br />范例四：将范例三解开的 man.config 用最佳的压缩比压缩，并保留原本的文件<br />[root@linux tmp]# bzip2 -9 -c man.config &gt; man.config.bz2<br />&nbsp;<br />&nbsp;<br />compress 命令 <br />[root@linux ~]# compress [-dcr] 文件或目录<br />参数：<br />-d ：用来解压缩的参数<br />-r ：可以连同目录下的文件也同时给予压缩呢！<br />-c ：将压缩资料输出成为 standard output (输出到萤幕)<br />范例：<br />范例一：将 /etc/man.config 複制到 /tmp ，并加以压缩<br />[root@linux ~]# cd /tmp<br />[root@linux tmp]# cp /etc/man.config .<br />[root@linux tmp]# compress man.config<br />[root@linux tmp]# ls -l<br />-rw-r--r-- 1 root root 2605 Jul 27 11:43 man.config.Z <br />范例二：将刚刚的压缩档解开<br />[root@linux tmp]# compress -d man.config.Z<br /><br />范例三：将 man.config 压缩成另外一个文件来备份<br />[root@linux tmp]# compress -c man.config &gt; man.config.back.Z<br />[root@linux tmp]# ll man.config*<br />-rw-r--r-- 1 root root 4506 Jul 27 11:43 man.config<br />-rw-r--r-- 1 root root 2605 Jul 27 11:46 man.config.back.Z<br /># 这个 -c 的参数比较有趣！他会将压缩过程的资料输出到萤幕上，而不是写入成为<br /># file.Z 文件。所以，我们可以透过资料流重导向的方法将资料输出成为另一个档名。<br /># 关於资料流重导向，我们会在 bash shell 当中详细谈论的啦！<br /><br />&nbsp;<br />&nbsp;<br />dd 命令 <br />[root@linux ~]# dd if="input_file" of="outptu_file" bs="block_size" \<br />count="number"<br />参数：<br />if ：就是 input file 啰～也可以是装置喔！<br />of ：就是 output file 喔～也可以是装置；<br />bs ：规划的一个 block 的大小，如果没有设定时，预设是 512 bytes<br />count：多少个 bs 的意思。<br />范例： <br />范例一：将 /etc/passwd 备份到 /tmp/passwd.back 当中<br />[root@linux ~]# dd if=/etc/passwd of=/tmp/passwd.back<br />3+1 records in<br />3+1 records out<br />[root@linux ~]# ll /etc/passwd /tmp/passwd.back<br />-rw-r--r-- 1 root root 1746 Aug 25 14:16 /etc/passwd<br />-rw-r--r-- 1 root root 1746 Aug 29 16:57 /tmp/passwd.back<br /># 仔细的看一下，我的 /etc/passwd 文件大小为 1746 bytes，因为我没有设定 bs ，<br /># 所以预设是 512 bytes 为一个单位，因此，上面那个 3+1 表示有 3 个完整的<br /># 512 bytes，以及未满 512 bytes 的另一个 block 的意思啦！<br /># 事实上，感觉好像是 cp 这个指令啦～<br /><br />范例二：备份 /dev/hda 的 MBR<br />[root@linux ~]# dd if=/dev/hda of=/tmp/mbr.back bs=512 count=1<br />1+0 records in<br />1+0 records out<br /># 这就得好好瞭解一下啰～我们知道整颗硬盘的 MBR 为 512 bytes，<br /># 就是放在硬盘的第一个 sector 啦，因此，我可以利用这个方式来将<br /># MBR 内的所有资料都纪录下来，真的很厉害吧！ ^_^<br /><br />范例三：将整个 /dev/hda1 partition 备份下来。<br />[root@linux ~]# dd if=/dev/hda1 of=/some/path/filenaem<br /># 这个指令很厉害啊！将整个 partition 的内容全部备份下来～<br /># 后面接的 of 必须要不是在 /dev/hda1 的目录内啊～否则，怎么读也读不完～<br /># 这个动作是很有效用的，如果改天你必须要完整的将整个 partition 的内容填回去，<br /># 则可以利用 dd if=/some/file of=/dev/hda1 来将资料写入到硬盘当中。<br /># 如果想要整个硬盘备份的话，就类似 Norton 的 ghost 软体一般，<br /># 由 disk 到 disk ，嘿嘿～利用 dd 就可以啦～厉害厉害！<br /><br />&nbsp;<br />&nbsp;<br />cpio 命令 <br />[root@linux ~]# cpio -covB &gt; [file|device] &lt;==备份<br />[root@linux ~]# cpio -icduv &lt; [file|device] &lt;==还原<br />参数：<br />-o ：将资料 copy 输出到文件或装置上<br />-i ：将资料自文件或装置 copy 出来系统当中<br />-t ：查看 cpio 建立的文件或装置的内容<br />-c ：一种较新的 portable format 方式储存<br />-v ：让储存的过程中文件名称可以在萤幕上显示<br />-B ：让预设的 Blocks 可以增加至 5120 bytes ，预设是 512 bytes ！<br />　　 这样的好处是可以让大文件的储存速度加快(请参考 i-nodes 的观念)<br />-d ：自动建立目录！由於 cpio 的内容可能不是在同一个目录内，<br />如此的话在反备份的过程会有问题！ 这个时候加上 -d 的话，<br />就可以自动的将需要的目录建立起来了！<br />-u ：自动的将较新的文件覆盖较旧的文件！<br />范例：<br />范例一：将所有系统上的资料通通写入磁带机内！<br />[root@linux ~]# find / -print | cpio -covB &gt; /dev/st0<br /># 一般来说，使用 SCSI 介面的磁带机，代号是 /dev/st0 喔！ <br />范例二：检查磁带机上面有什么文件？<br />[root@linux ~]# cpio -icdvt &lt; /dev/st0<br />[root@linux ~]# cpio -icdvt &lt; /dev/st0 &gt; /tmp/content<br /># 第一个动作当中，会将磁带机内的档名列出到萤幕上面，而我们可以透过第二个动作，<br /># 将所有的档名通通纪录到 /tmp/content 文件去！<br /><br />范例三：将磁带上的资料还原回来～<br />[root@linux ~]# cpio -icduv &lt; /dev/st0<br /># 一般来说，使用 SCSI 介面的磁带机，代号是 /dev/st0 喔！<br /><br />范例四：将 /etc 底下的所有『文件』都备份到 /root/etc.cpio 中！<br />[root@linux ~]# find /etc -type f | cpio -o &gt; /root/etc.cpio<br /># 这样就能够备份啰～您也可以将资料以 cpio -i &lt; /root/etc.cpio<br /># 来将资料捉出来！！！！<br /><br />&nbsp;摘自：<div><a target="_blank" href="http://wenku.baidu.com/view/81818707e87101f69e3195c1.html">http://wenku.baidu.com/view/81818707e87101f69e3195c1.html</a></div><img src ="http://www.blogjava.net/Man/aggbug/369596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-08 15:16 <a href="http://www.blogjava.net/Man/archive/2012/02/08/369596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux shell脚本的字符串截取</title><link>http://www.blogjava.net/Man/archive/2012/02/07/369504.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Tue, 07 Feb 2012 02:08:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2012/02/07/369504.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/369504.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2012/02/07/369504.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/369504.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/369504.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt;"> </span><p><span style="font-size: 12pt;"><strong>Linux 的字符串截取很有用。有八种方法。</strong></span></p><p><span style="font-size: 12pt;">摘自：</span><span style="font-size: 12pt;"></span>http://blog.csdn.net/gumanren/article/details/5601544</p><p>&nbsp;</p> <p><span style="font-size: 12pt;"><br /></span></p><p><span style="font-size: 12pt;">假设有变量</span> <strong><span style="color: #ff0000; font-size: 12pt;">var=http://www.hao.com/123.htm</span></strong></p> <p><span style="color: #ff0000; font-size: 12pt;">.</span></p> <p>&nbsp;</p> <p><strong><span style="background-color: #ffffff; color: #0000ff; font-size: 12pt;">一 # 号截取，删除左边字符，保留右边字符。</span></strong></p> <p>&nbsp;</p> <p><span style="color: #ff0000; font-size: 12pt;"><strong>echo ${var#*//}</strong></span></p> <p><span style="font-size: 12pt;"><strong>其中 </strong></span><span style="font-size: 12pt; color: #ff0000;"><strong>var </strong></span><span style="font-size: 12pt;"><strong>是变量名，</strong></span><span style="font-size: 12pt; color: #ff0000;"><strong>#</strong></span><span style="font-size: 12pt;"><strong> 号是运算符，</strong><span style="color: #ff0000; font-size: 12pt;"><strong>*// </strong></span></span><strong><span style="font-size: 12pt;">表示从左边开始删除第一个 // 号及左边的所有字符</span></strong></p> <p><span style="font-size: 12pt;"><strong>即删除</strong> </span><strong><span style="color: #ff0000; font-size: 12pt;">http://</span></strong></p> <p><strong><span style="font-size: 12pt;">结果是 ：</span></strong><strong><span style="color: #ff0000; font-size: 12pt;">www.hao.com/123.htm</span></strong></p>  <p><span style="color: #ff0000; font-size: x-small;"><strong></strong><span style="font-size: 12pt;"></span></span><br /></p><p>&nbsp;</p> <p><span style="color: #0000ff; font-size: 12pt;"><strong>二 ## 号截取，删除左边字符，保留右边字符。</strong></span></p> <p><strong><span style="color: #ff0000; font-size: 12pt;">echo ${var##*/}</span></strong></p> <p><span style="color: #ff0000;"><span style="font-size: x-small;"><span style="color: #ff0000; font-size: 12pt;"><strong>##*/ </strong></span><strong><span style="color: #000000; font-size: 12pt;">表示从左边开始删除最后（最右边）一个 / 号及左边的所有字符</span></strong></span></span></p> <p><span style="color: #ff0000;"><span style="font-size: x-small;"><strong><span style="color: #000000; font-size: 12pt;">即删除</span></strong><strong><span style="color: #000000; font-size: 12pt;"> </span></strong><span style="color: #ff0000; font-size: 12pt;"><strong>http://www.hao.com/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong></span></span></span></p> <p><span style="color: #ff0000;"><span style="font-size: x-small;"><span style="color: #000000; font-size: 12pt;"><strong>结果是</strong></span><span style="color: #000000; font-size: 12pt;"><strong>: </strong></span><span style="color: #ff0000; font-size: 12pt;"><strong>123.htm</strong></span></span></span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p><span style="color: #0000ff; font-size: 12pt;"><strong>三 %号截取，删除右边字符，保留左边字符</strong></span></p> <p><span style="color: #ff0000;"><span style="font-size: x-small;"><span style="color: #ff0000; font-size: 12pt;"><strong>echo ${var%/*}</strong></span></span></span></p> <p><span style="color: #ff0000;"><span style="font-size: x-small;"><span style="color: #ff0000; font-size: 12pt;"><strong>%/* <span style="color: #000000;">表示从右边开始，删除第一个 / 号及右边的字符</span></strong></span></span></span></p> <p><span style="color: #000000; font-size: 12pt;"><strong>结果是：<span style="color: #ff0000;">http://www.hao.com</span></strong></span></p>  <p><span style="color: #000000; font-size: x-small;"><span style="color: #ff0000;"><strong></strong><span style="font-size: 12pt;"></span></span></span><br /></p><p>&nbsp;</p> <p><span style="color: #000000; font-size: x-small;"><strong><span style="color: #ff0000;"><span style="color: #0000ff; font-size: 12pt;">四</span> </span><span style="color: #0000ff; font-size: 12pt;">%% 号截取，删除右边字符，保留左边字符</span></strong></span></p> <p><span style="color: #000000; font-size: x-small;"><strong><span style="color: #0000ff;"> </span></strong></span></p><p><strong><span style="color: #ff0000;"><span style="font-size: x-small;"><span style="color: #ff0000; font-size: 12pt;"><strong>echo ${var%%/*}</strong></span></span></span></strong></p><strong> <p><span style="color: #ff0000;"><span style="font-size: x-small;"><span style="color: #ff0000; font-size: 12pt;"><strong>%%/* <span style="color: #000000;">表示从右边开始，删除最后（最左边）一个 / 号及右边的字符</span></strong></span></span></span></p> <p><span style="color: #000000; font-size: 12pt;"><strong>结果是：<span style="color: #ff0000;">http:</span></strong></span></p>     <p>&nbsp;</p>  <p>&nbsp;</p> <p><span style="color: #000000; font-size: 12pt;"><strong><span style="color: #0000ff; font-size: 12pt;">五 从左边第几个字符开始，及字符的个数</span></strong></span></p> <p><span style="color: #000000; font-size: x-small;"><strong><span style="color: #ff0000; font-size: 12pt;">echo ${var:0:5}</span></strong></span></p> <p>&nbsp;</p> <p><span style="font-size: 12pt;">其中的 0 表示左边第一个字符开始，5 表示字符的总个数。</span></p> <p><span style="color: #000000; font-size: 12pt;">结果是：</span><span style="color: #ff0000; font-size: 12pt;">http:</span></p>   <p>&nbsp;</p> <p>&nbsp;</p> <p><span style="color: #0000ff; font-size: 12pt;">六 从左边第几个字</span><span style="color: #0000ff; font-size: 12pt;">符开始，一直到结束。</span></p> <p><span style="color: #ff0000; font-size: 12pt;">echo ${var:7}</span></p> <p><span style="font-size: 12pt;">其中的 7 表示左边第8个字符开始，一直到结束。</span></p> <p><span style="color: #000000; font-size: 12pt;">结果是</span><span style="font-size: 12pt;"> ：</span><strong><span style="color: #ff0000; font-size: x-small;"><span style="color: #ff0000; font-size: 12pt;">www.hao.com/123.htm</span> </span></strong></p>  <p><strong><span style="color: #000000; font-size: 12pt;"><br /></span></strong></p> <p>&nbsp;</p> <p><strong><span style="color: #0000ff; font-size: 12pt;">七 <span style="color: #000000; font-size: x-small;"><strong><span style="color: #0000ff; font-size: 12pt;">从右边第几个字符开始，及字符的个数</span></strong></span></span></strong></p> <p><span style="color: #000000; font-size: x-small;"><strong><span style="color: #ff0000; font-size: 12pt;">echo ${var:0-7:3}</span></strong></span></p> <p>&nbsp;</p> <p><span style="color: #000000; font-size: 12pt;">其中的 <span style="color: #000000; font-size: 12pt;">0-7</span></span><span style="color: #000000; font-size: 12pt;"> 表示右边算起第七个字符开始，3 表示字符的个数。</span></p> <p><span style="color: #000000; font-size: 12pt;">结果是</span><span style="font-size: 12pt;">：</span><span style="font-size: 12pt; color: #ff0000;">123</span></p> <p><span style="color: #000000; font-size: 12pt;"><br /></span></p>  <p>&nbsp;</p> <p><span style="font-size: 12pt; color: #0000ff;">八 从右边第几个字符开始，一直到结束。</span></p> <p><span style="font-size: 12pt; color: #ff0000;">echo ${var:0-7}</span></p><p><span style="font-size: 12pt; color: #ff0000;"><br /></span></p> <p><span style="color: #000000; font-size: 12pt;">表示从右边第七个字符开始，一直到结束。</span></p> <p><span style="color: #000000; font-size: 12pt;">结果是：</span><span style="font-size: 12pt; color: #ff0000;">123.htm</span></p> <p><span style="font-size: 12pt;"><br /></span></p> <p><span style="font-size: 12pt;"><br /></span></p> <p><span style="font-size: 12pt; background-color: yellow;">注：（左边的第一个字符是用 0 表示，右边的第一个字符用 0-1 表示）</span></p></strong><img src ="http://www.blogjava.net/Man/aggbug/369504.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2012-02-07 10:08 <a href="http://www.blogjava.net/Man/archive/2012/02/07/369504.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TFTP 在solaris10上传文件总是失败</title><link>http://www.blogjava.net/Man/archive/2011/10/10/360420.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Mon, 10 Oct 2011 10:31:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2011/10/10/360420.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/360420.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2011/10/10/360420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/360420.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/360420.html</trackback:ping><description><![CDATA[<span style="font-size: 9pt; color: #000000; font-family: 宋体;">最近在solaris</span><span style="font-size: 9pt; color: #000000; font-family: 宋体;">使用TFTP传文件总是失败，抓包分析发现UDP层的checksum值不正确。将其关闭后则能正常发送了。</span><span style="font-size: 9pt; color: blue; font-family: 宋体;"><br /></span><span style="font-size: 9pt; color: blue; font-family: Arial;"></span><span style="font-size: 9pt; color: blue; font-family: 宋体;"><br /><br /></span><p><span style="font-size: 9pt; color: blue; font-family: Arial;">Solaris  10</span><span style="font-size: 9pt; color: blue; font-family: 宋体;">上关闭</span><span style="font-size: 9pt; color: blue; font-family: Arial;">checksum</span><span style="font-size: 9pt; color: blue; font-family: 宋体;">的方法如下：</span></p> <p><span style="font-size: 9pt; color: blue; font-family: Arial;">put that into  /etc/system and reboot: </span></p> <p><span style="font-size: 9pt; color: blue; font-family: Arial;">set  ip:dohwcksum=0</span></p><img src ="http://www.blogjava.net/Man/aggbug/360420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2011-10-10 18:31 <a href="http://www.blogjava.net/Man/archive/2011/10/10/360420.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[shell]在windows下自动把你修改过的文件塞到指定的jar文件中</title><link>http://www.blogjava.net/Man/archive/2011/06/02/351583.html</link><dc:creator>此号已被删</dc:creator><author>此号已被删</author><pubDate>Thu, 02 Jun 2011 03:52:00 GMT</pubDate><guid>http://www.blogjava.net/Man/archive/2011/06/02/351583.html</guid><wfw:comment>http://www.blogjava.net/Man/comments/351583.html</wfw:comment><comments>http://www.blogjava.net/Man/archive/2011/06/02/351583.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/Man/comments/commentRss/351583.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/Man/services/trackbacks/351583.html</trackback:ping><description><![CDATA[<p><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">功能简介：</span></strong></p> <p><span style="font-size: 12pt; font-family: Arial;">aj.sh</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 12pt; font-family: 宋体;">自动把你</span><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: Arial;">版本库</span></strong><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: 宋体;">下处于</span></strong><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: Arial;">checkOut</span></strong><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: 宋体;">状态</span></strong><span style="font-size: 12pt; font-family: 宋体;">的非</span><span style="font-size: 12pt; font-family: Arial;">java</span><span style="font-size: 12pt; font-family: 宋体;">文件、</span><span style="font-size: 12pt; font-family: Arial;">java</span><span style="font-size: 12pt; font-family: 宋体;">源码编译后的</span><span style="font-size: 12pt; font-family: Arial;">class</span><span style="font-size: 12pt; font-family: 宋体;">文件，塞到指定的</span><span style="font-size: 12pt; font-family: Arial;">jar</span><span style="font-size: 12pt; font-family: 宋体;">文件中。</span></p> <p><span style="font-size: 12pt; font-family: Arial;">aj24.sh</span>&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 12pt; font-family: 宋体;">自动把你<strong><span style="font-weight: bold; background: none repeat scroll 0% 0% #ffcc00;">最近</span></strong></span><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: Arial;">24</span></strong><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: 宋体;">小时内修改过的</span></strong><span style="font-size: 12pt; font-family: 宋体;">的非</span><span style="font-size: 12pt; font-family: Arial;">java</span><span style="font-size: 12pt; font-family: 宋体;">文件、</span><span style="font-size: 12pt; font-family: Arial;">java</span><span style="font-size: 12pt; font-family: 宋体;">源码编译后的</span><span style="font-size: 12pt; font-family: Arial;">class</span><span style="font-size: 12pt; font-family: 宋体;">文件，塞到指定的</span><span style="font-size: 12pt; font-family: Arial;">jar</span><span style="font-size: 12pt; font-family: 宋体;">文件中。</span></p><p><br /><span style="font-size: 12pt; font-family: 宋体;"></span></p><p><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">运行方式：</span></strong></p> <p><span style="font-size: 12pt;">1</span><span style="font-size: 12pt; font-family: 宋体;">、用文本编辑器打开</span><span style="font-size: 12pt;">aj.sh</span><span style="font-size: 12pt; font-family: 宋体;">、</span><span style="font-size: 12pt;">aj24.sh,</span><span style="font-size: 12pt; font-family: 宋体;">更改以下几个变量：</span></p> <p><strong><span style="font-weight: bold; font-size: 12pt; color: red;">jar_file&nbsp;  </span></strong><span style="font-size: 12pt; font-family: 宋体;">指定</span><span style="font-size: 12pt;">jar</span><span style="font-size: 12pt; font-family: 宋体;">文件的完整路径（注意路径分隔符一律用</span><span style="font-size: 12pt;">&#8217;<span style="color: red;">/</span>&#8217;</span><span style="font-size: 12pt; font-family: 宋体;">）</span></p> <p><strong><span style="font-weight: bold; font-size: 12pt; color: red;">bin_dir&nbsp;&nbsp;  </span></strong><span style="font-size: 12pt; font-family: 宋体;">指定</span><span style="font-size: 12pt;">class</span><span style="font-size: 12pt; font-family: 宋体;">所在的</span><span style="font-size: 12pt;">bin</span><span style="font-size: 12pt; font-family: 宋体;">完整路径</span></p> <p><strong><span style="font-weight: bold; font-size: 12pt; color: red;">src_dir&nbsp;&nbsp;  </span></strong><span style="font-size: 12pt; font-family: 宋体;">指定源码所在的</span><span style="font-size: 12pt;">src</span><span style="font-size: 12pt; font-family: 宋体;">完整路径</span></p> <p><span style="font-size: 12pt;">2</span><span style="font-size: 12pt; font-family: 宋体;">、打开</span><span style="font-size: 12pt;">cygwin</span><span style="font-size: 12pt; font-family: 宋体;">，进入脚本文件所在的目录，运行如下命令：</span></p> <p><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: Arial;">sh  aj.sh</span></strong></p> <p><span style="font-size: 12pt; font-family: 宋体;">或</span></p> <p><strong><span style="font-weight: bold; font-size: 12pt; background: none repeat scroll 0% 0% #ffcc00; font-family: Arial;">sh  aj24.sh</span></strong></p> <p>&nbsp;</p> <p><strong><span style="font-weight: bold; font-size: 12pt;">ps</span></strong><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">：</span></strong></p> <p><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">指定</span></strong><strong><span style="font-weight: bold; font-size: 12pt;">cygwin</span></strong><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">打开时的默认路径：</span></strong></p> <p><span style="font-size: 12pt; font-family: 宋体;">新建一个环境变量</span><strong><span style="font-weight: bold; font-size: 12pt;">HOME</span></strong><span style="font-size: 12pt; font-family: 宋体;">，设置为脚本文件所在的目录。</span></p> <p><span style="font-size: 12pt; font-family: 宋体;">这样可以更加方便、快速地运行脚本。</span></p> <p><span style="font-size: 12pt; font-family: 宋体;">路径<strong><span style="font-weight: bold; color: red;">分割符用&#8216;</span></strong></span><strong><span style="font-weight: bold; font-size: 12pt; color: red;">/</span></strong><strong><span style="font-weight: bold; font-size: 12pt; color: red; font-family: 宋体;">&#8217;</span></strong><span style="font-size: 12pt;">,</span><span style="font-size: 12pt; font-family: 宋体;">磁盘符用</span><span style="font-size: 12pt;">cygdrive</span><span style="font-size: 12pt; font-family: 宋体;">表示。</span><span style="font-size: 12pt;">eg</span><span style="font-size: 12pt; font-family: 宋体;">：</span><span style="font-size: 12pt;"> <span>d:\shell&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span></span><span style="font-size: 12pt; font-family: 宋体;">&#8212;&#8212;》</span><span style="font-size: 12pt;">&nbsp;&nbsp;  &nbsp;/cygdrive/d/shell</span></p> <p><br /><span style="font-size: 10pt;"></span></p><p><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">环境依赖：</span></strong></p> <p><span style="font-size: 12pt;">JDK/JRE</span></p> <p><span style="font-size: 12pt;">Cygwin</span></p> <p><strong><span style="font-weight: bold; font-size: 12pt;">cywin</span></strong><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">安装</span></strong><span style="font-size: 12pt; font-family: 宋体;">：进入下载页</span><span style="font-size: 12pt;"><a title="blocked::http://cygwin.com/install.html" href="http://cygwin.com/install.html">http://cygwin.com/install.html</a></span><span style="font-size: 12pt; font-family: 宋体;">，将&#8220;</span><strong><span style="font-weight: bold; font-size: 12pt;">setup.exe</span></strong><span style="font-size: 12pt; font-family: 宋体;">&#8221;下载到本地运行，</span><span style="font-size: 12pt; font-family: 宋体;">一路默认即可。</span></p> <p><span style="font-size: 12pt; font-family: 宋体;">安装参考文档：</span><span style="font-size: 12pt;"><a title="blocked::http://goo.gl/eXfzx" href="http://goo.gl/eXfzx">http://goo.gl/eXfzx</a></span></p>  <p><a target="_blank" href="http://goo.gl/VdMdl">cygwin常用命令及find命令说明 </a></p><div></div><p>&nbsp;</p><p><br /></p> <p><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">缺陷：</span></strong></p> <p style="background: none repeat scroll 0% 0% #ffcc00; margin-left: 36pt; text-indent: -36pt;"><span style="font-size: 12pt;"><span>1、<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span></span></span><span style="font-size: 12pt; font-family: 宋体;">如果你修改的是<strong><span style="font-weight: bold;">需要转义的中文资源文件</span></strong>，需要自己去转义后再覆盖过去。</span></p> <p style="background: none repeat scroll 0% 0% #ffcc00; margin-left: 36pt; text-indent: -36pt;"><span style="font-size: 12pt;"><span>2、<span style="font: 7pt 'Times New Roman';">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  </span></span></span><span style="font-size: 12pt; font-family: 宋体;">如果你修改的是</span><strong><span style="font-weight: bold; font-size: 12pt;">java</span></strong><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">文件中的非内部类</span></strong><span style="font-size: 12pt; font-family: 宋体;">，也需要手动去找到该</span><span style="font-size: 12pt;">class</span><span style="font-size: 12pt; font-family: 宋体;">类，再塞到</span><span style="font-size: 12pt;">jar</span><span style="font-size: 12pt; font-family: 宋体;">文件去。</span></p> <p>&nbsp;</p><p>&nbsp;</p><div><strong><span style="font-weight: bold; font-size: 12pt; font-family: 宋体;">脚本文件：</span></strong></div><p>&nbsp;</p><p>aj.sh （将第16行注释掉，第17行去掉注释，即为&#8220;aj24.sh&#8221;）<br /></p><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">#</span><span style="color: #008000;">!/bin/sh<br /></span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #008000;">#&nbsp;Auto&nbsp;zip&nbsp;the&nbsp;files&nbsp;which&nbsp;are&nbsp;checked&nbsp;out&nbsp;or&nbsp;modified&nbsp;to&nbsp;the&nbsp;target&nbsp;jar&nbsp;file.<br /></span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #008000;">#&nbsp;Note:&nbsp;use&nbsp;'/'&nbsp;as&nbsp;separator&nbsp;in&nbsp;directory<br /></span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #008000;">#&nbsp;target&nbsp;jar&nbsp;file</span><span style="color: #008000;"><br /></span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">jar_file</span><span style="color: #000000;">=</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">G:/demo.jar</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;bin&nbsp;directory&nbsp;of&nbsp;compiled&nbsp;class&nbsp;files</span><span style="color: #008000;"><br /></span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">bin_dir</span><span style="color: #000000;">=</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">D:/workspace/demo/bin</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;"><br /></span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;src&nbsp;directory&nbsp;of&nbsp;source&nbsp;files</span><span style="color: #008000;"><br /></span><span style="color: #008080;">13</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">src_dir</span><span style="color: #000000;">=</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">D:/workspace/demo/src</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;"><br /></span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">condition</span><span style="color: #000000;">=</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">-perm&nbsp;644</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;"><br /></span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"></span><span style="color: #008000;">#</span><span style="color: #008000;">condition='&nbsp;-mtime&nbsp;0'</span><span style="color: #008000;"><br /></span><span style="color: #008080;">18</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">c_j</span><span style="color: #000000;">=</span><span style="color: #800000;">0</span><span style="color: #000000;"><br /></span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">c_nj</span><span style="color: #000000;">=</span><span style="color: #800000;">0</span><span style="color: #000000;"><br /></span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">c_c</span><span style="color: #000000;">=</span><span style="color: #800000;">0</span><span style="color: #000000;"><br /></span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">function&nbsp;count_javaFiles<br /></span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">c_j=$c_j&nbsp;+&nbsp;1</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">function&nbsp;count_nonJavaFiles<br /></span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">c_nj=$c_nj&nbsp;+&nbsp;1</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">function&nbsp;count_classFiles<br /></span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;let&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">c_c=$c_c&nbsp;+&nbsp;1</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">function&nbsp;inspectZip<br /></span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">local</span><span style="color: #000000;">&nbsp;fileName</span><span style="color: #000000;">=</span><span style="color: #000000;">$</span><span style="color: #800000;">1</span><span style="color: #000000;"><br /></span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">local</span><span style="color: #000000;">&nbsp;dir_pre</span><span style="color: #000000;">=</span><span style="color: #000000;">$</span><span style="color: #800000;">2</span><span style="color: #000000;"><br /></span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">local</span><span style="color: #000000;">&nbsp;line<br /></span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">local</span><span style="color: #000000;">&nbsp;list<br /></span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">local</span><span style="color: #000000;">&nbsp;myDir_pre<br /></span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;cd&nbsp;</span><span style="color: #800080;">$bin_dir</span><span style="color: #000000;"><br /></span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;list</span><span style="color: #000000;">=</span><span style="color: #000000;">`&nbsp;find&nbsp;</span><span style="color: #000000;">.</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">${fileName}[$.]*class</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;">&nbsp;`<br /></span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;line&nbsp;in&nbsp;</span><span style="color: #800080;">$list</span><span style="color: #000000;"><br /></span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br /></span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;myDir_pre</span><span style="color: #000000;">=</span><span style="color: #000000;">${line</span><span style="color: #000000;">%/*</span><span style="color: #000000;">}<br /></span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;[&nbsp;</span><span style="color: #800080;">$myDir_pre</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$dir_pre</span><span style="color: #000000;">&nbsp;]<br /></span><span style="color: #008080;">48</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;then<br /></span><span style="color: #008080;">49</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;jar&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">uvf&nbsp;</span><span style="color: #800080;">$jar_file</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$line</span><span style="color: #000000;"><br /></span><span style="color: #008080;">50</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count_classFiles<br /></span><span style="color: #008080;">51</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fi<br /></span><span style="color: #008080;">52</span>&nbsp;<span style="color: #000000;">done<br /></span><span style="color: #008080;">53</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">54</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">55</span>&nbsp;<span style="color: #000000;">function&nbsp;easyZip<br /></span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">{<br /></span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">local</span><span style="color: #000000;">&nbsp;file</span><span style="color: #000000;">=</span><span style="color: #000000;">$</span><span style="color: #800000;">1</span><span style="color: #000000;"><br /></span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;jar&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">uvf&nbsp;</span><span style="color: #800080;">$jar_file</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$file</span><span style="color: #000000;"><br /></span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;count_nonJavaFiles<br /></span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">}<br /></span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">cd&nbsp;</span><span style="color: #800080;">$src_dir</span><span style="color: #000000;"><br /></span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">list</span><span style="color: #000000;">=</span><span style="color: #000000;">`find&nbsp;</span><span style="color: #000000;">.</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">type&nbsp;f&nbsp;</span><span style="color: #800080;">$condition</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">\</span><span style="color: #000000;">(&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">*.java</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">*.keep</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">*.keep.[0-9]*</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">*.contrib</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">o&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">*.contrib.[0-9]*</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">\</span><span style="color: #000000;">)`<br /></span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;line&nbsp;in&nbsp;</span><span style="color: #800080;">$list</span><span style="color: #000000;"><br /></span><span style="color: #008080;">65</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br /></span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;easyZip&nbsp;</span><span style="color: #800080;">$line</span><span style="color: #000000;"><br /></span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">done<br /></span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">list</span><span style="color: #000000;">=</span><span style="color: #000000;">`find&nbsp;</span><span style="color: #000000;">.</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">type&nbsp;f&nbsp;</span><span style="color: #800080;">$condition</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">-</span><span style="color: #000000;">name&nbsp;</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000; font-weight: bold;">*.java</span><span style="color: #000000; font-weight: bold;">'</span><span style="color: #000000;">&nbsp;`<br /></span><span style="color: #008080;">70</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;line&nbsp;in&nbsp;</span><span style="color: #800080;">$list</span><span style="color: #000000;"><br /></span><span style="color: #008080;">71</span>&nbsp;<span style="color: #000000;"></span><span style="color: #0000ff;">do</span><span style="color: #000000;"><br /></span><span style="color: #008080;">72</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;dir_pre</span><span style="color: #000000;">=</span><span style="color: #000000;">${line</span><span style="color: #000000;">%/*</span><span style="color: #000000;">}<br /></span><span style="color: #008080;">73</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;fileName</span><span style="color: #000000;">=</span><span style="color: #000000;">`echo&nbsp;${line</span><span style="color: #008000;">#</span><span style="color: #008000;">#*/}&nbsp;|&nbsp;cut&nbsp;-d&nbsp;'.'&nbsp;-f1`</span><span style="color: #008000;"><br /></span><span style="color: #008080;">74</span>&nbsp;<span style="color: #008000;"></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;inspectZip&nbsp;</span><span style="color: #800080;">$fileName</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$dir_pre</span><span style="color: #000000;"><br /></span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;count_javaFiles<br /></span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">done<br /></span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">79</span>&nbsp;<span style="color: #000000;"><br /></span><span style="color: #008080;">80</span>&nbsp;<span style="color: #000000;">echo&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">non-java&nbsp;files:&nbsp;$c_nj</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">81</span>&nbsp;<span style="color: #000000;">echo&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">java&nbsp;files:&nbsp;$c_j</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">82</span>&nbsp;<span style="color: #000000;">echo&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">class&nbsp;files:&nbsp;$c_c</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">83</span>&nbsp;<span style="color: #000000;">echo&nbsp;</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000; font-weight: bold;">total&nbsp;files:&nbsp;&nbsp;$[$c_nj&nbsp;+&nbsp;$c_c]</span><span style="color: #000000; font-weight: bold;">"</span><span style="color: #000000;"><br /></span><span style="color: #008080;">84</span>&nbsp;<span style="color: #000000;"></span></div><img src ="http://www.blogjava.net/Man/aggbug/351583.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/Man/" target="_blank">此号已被删</a> 2011-06-02 11:52 <a href="http://www.blogjava.net/Man/archive/2011/06/02/351583.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>