﻿<?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-java 友人帮-文章分类-Linux command</title><link>http://www.blogjava.net/jzone/category/42911.html</link><description>java web, java wap ..My laboratory..</description><language>zh-cn</language><lastBuildDate>Sat, 05 Dec 2009 00:22:31 GMT</lastBuildDate><pubDate>Sat, 05 Dec 2009 00:22:31 GMT</pubDate><ttl>60</ttl><item><title>Linux 输入、输出、重定向、管道</title><link>http://www.blogjava.net/jzone/articles/304714.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Thu, 03 Dec 2009 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304714.html</guid><description><![CDATA[<a href="http://doc.linuxpk.com/41840.html">http://doc.linuxpk.com/41840.html</a> <br />
<a href="http://www.cnblogs.com/hexapodsoft/archive/2007/04/24/724902.html">http://www.cnblogs.com/hexapodsoft/archive/2007/04/24/724902.html</a> 
<img src ="http://www.blogjava.net/jzone/aggbug/304714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-12-03 23:15 <a href="http://www.blogjava.net/jzone/articles/304714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 常用命令（文件的复制、删除和移动）</title><link>http://www.blogjava.net/jzone/articles/304713.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Thu, 03 Dec 2009 15:10:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304713.html</guid><description><![CDATA[<p><strong>cp命令</strong> <br />
该命令的功能是将给出的文件或目录拷贝到另一文件或目录中，同MSDOS下的copy命令一样，功能十分强大。 </p>
<p>语法： cp [选项] 源文件或目录 目标文件或目录 </p>
<p>说明：该命令把指定的源文件复制到目标文件或把多个源文件复制到目标目录中。</p>
<p>该命令的各选项含义如下：</p>
<p>- a 该选项通常在拷贝目录时使用。它保留链接、文件属性，并递归地拷贝目录，其作用等于dpR选项的组合。</p>
<p>- d 拷贝时保留链接。</p>
<p>- f 删除已经存在的目标文件而不提示。</p>
<p>- i 和f选项相反，在覆盖目标文件之前将给出提示要求用户确认。回答y时目标文件将被覆盖，是交互式拷贝。 </p>
<p>- p 此时cp除复制源文件的内容外，还将把其修改时间和访问权限也复制到新文件中。 </p>
<p>- r 若给出的源文件是一目录文件，此时cp将递归复制该目录下所有的子目录和文件。此时目标文件必须为一个目录名。</p>
<p>- l 不作拷贝，只是链接文件。 </p>
<p>　　需要说明的是，为防止用户在不经意的情况下用cp命令破坏另一个文件，如用户指定的目标文件名已存在，用cp命令拷贝文件后，这个文件就会被新源文件覆盖，因此，建议用户在使用cp命令拷贝文件时，最好使用i选项。</p>
<p><strong>mv命令</strong></p>
<p>用户可以使用mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中。该命令如同MSDOS下的ren和move的组合。</p>
<p>语法：mv [选项] 源文件或目录 目标文件或目录 </p>
<p>说明：视mv命令中第二个参数类型的不同（是目标文件还是目标目录），mv命令将文件重命名或将其移至一个新的目录中。当第二个参数类型是文件时，mv命令完成文件重命名，此时，源文件只能有一个（也可以是源目录名），它将所给的源文件或目录重命名为给定的目标文件名。当第二个参数是已存在的目录名称时，源文件或目录参数可以有多个，mv命令将各参数指定的源文件均移至目标目录中。在跨文件系统移动文件时，mv先拷贝，再将原有文件删除，而链至该文件的链接也将丢失。</p>
<p>命令中各选项的含义为：</p>
<p>- I 交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖，此时系统询问是否重写，要求用户回答y或n，这样可以避免误覆盖文件。</p>
<p>- f 禁止交互操作。在mv操作要覆盖某已有的目标文件时不给任何指示，指定此选项后，i选项将不再起作用。</p>
<p>如果所给目标文件（不是目录）已存在，此时该文件的内容将被新文件覆盖。为防止用户用mv命令破坏另一个文件，使用mv命令移动文件时，最好使用i选项。 </p>
<p><strong>rm命令</strong></p>
<p>用户可以用rm命令删除不需要的文件。该命令的功能为删除一个目录中的一个或多个文件或目录，它也可以将某个目录及其下的所有文件及子目录均删除。对于链接文件，只是断开了链接，原文件保持不变。</p>
<p>rm命令的一般形式为：</p>
<p>rm [选项] 文件&#8230; </p>
<p>如果没有使用- r选项，则rm不会删除目录。 </p>
<p>该命令的各选项含义如下：</p>
<p>- f 忽略不存在的文件，从不给出提示。 </p>
<p>- r 指示rm将参数中列出的全部目录和子目录均递归地删除。</p>
<p>- i 进行交互式删除。 </p>
<p>使用rm命令要小心。因为一旦文件被删除，它是不能被恢复的。了防止这种情况的发生，可以使用i选项来逐个确认要删除的文件。如果用户输入y，文件将被删除。如果输入任何其他东西，文件则不会删除。</p>
<img src ="http://www.blogjava.net/jzone/aggbug/304713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-12-03 23:10 <a href="http://www.blogjava.net/jzone/articles/304713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trap命令详解</title><link>http://www.blogjava.net/jzone/articles/304082.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:58:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304082.html</guid><description><![CDATA[<h3 class="type_reprint" title="转载"><a href="http://shihaiyang.javaeye.com/blog/438130"></a>&nbsp;</h3>
<div class="blog_content">原文地址：http://koudai.360.cn/u/18497921/article_125515949.html?s=y <br />
参考地址：http://www.cnblogs.com/guosixu/archive/2008/07/11/1240821.html <br />
　 <br />
　一. trap捕捉到信号之后，可以有三种反应方式： <br />
　　(1)执行一段程序来处理这一信号 <br />
　　(2)接受信号的默认操作 <br />
　　(3)忽视这一信号 <br />
<br />
　　二. trap对上面三种方式提供了三种基本形式： <br />
　　
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438130#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>第一种形式的trap命令在shell接收到signal&nbsp;list清单中数值相同的信号时，将执行双引号中的命令串。 &nbsp;&nbsp;</span></span></li>
    <li><span>　　trap&nbsp;</span><span class="string">'commands'</span><span>&nbsp;signal-list &nbsp;&nbsp;</span></span></li>
    <li><span>　　trap&nbsp;</span><span class="string">"commands"</span><span>&nbsp;signal-list &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>　　为了恢复信号的默认操作，使用第二种形式的trap命令： &nbsp;&nbsp;</span></li>
    <li><span>　　trap&nbsp;signal-list &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>　　第三种形式的trap命令允许忽视信号 &nbsp;&nbsp;</span></li>
    <li><span>　　trap&nbsp;</span><span class="string">"&nbsp;"</span><span>&nbsp;signal-list&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">第一种形式的trap命令在shell接收到signal list清单中数值相同的信号时，将执行双引号中的命令串。
　　trap 'commands' signal-list
　　trap "commands" signal-list
　　为了恢复信号的默认操作，使用第二种形式的trap命令：
　　trap signal-list
　　第三种形式的trap命令允许忽视信号
　　trap " " signal-list</pre>
<br />
<br />
　　注意： <br />
　　(1) 对信号11(段违例)不能捕捉，因为shell本身需要捕捉该信号去进行内存的转储。 <br />
　　(2) 在trap中可以定义对信号0的处理(实际上没有这个信号)， shell程序在其终止(如执行exit语句)时发出该信号。 <br />
　　(3) 在捕捉到signal-list中指定的信号并执行完相应的命令之后， 如果这些命令没有将shell程序终止的话，shell程序将继续执行收到信号时所执行的命令后面的命令，这样将很容易导致shell程序无法终止。 <br />
<br />
　　另外，在trap语句中，单引号和双引号是不同的，当shell程序第一次碰到trap语句时，将把commands中的命令扫描一遍。此时若commands是用单引号括起来的话，那么shell不会对commands中的变量和命令进行替换， 否则commands中的变量和命令将用当时具体的值来替换。 <br />
<br />
<br />
在有些情况下，我们不希望自己的shell脚本在运行时刻被中断，比如说我们写得shell脚本设为某一用户的默认shell，使这一用户进入系统后只能作某一项工作，如数据库备份， 我们可不希望用户使用ctrl+C之类便进入到shell状态，做我们不希望做的事情。这便用到了信号处理。 <br />
<br />
kill -l可以列出系统的信号名称，如下： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438130#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;kill&nbsp;-l &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;</span><span class="number">1</span><span>)&nbsp;SIGHUP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">2</span><span>)&nbsp;SIGINT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">3</span><span>)&nbsp;SIGQUIT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">4</span><span>)&nbsp;SIGILL &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;</span><span class="number">5</span><span>)&nbsp;SIGTRAP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">6</span><span>)&nbsp;SIGABRT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">7</span><span>)&nbsp;SIGEMT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">8</span><span>)&nbsp;SIGFPE &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;</span><span class="number">9</span><span>)&nbsp;SIGKILL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">10</span><span>)&nbsp;SIGBUS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">11</span><span>)&nbsp;SIGSEGV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">12</span><span>)&nbsp;SIGSYS &nbsp;&nbsp;</span></span></li>
    <li><span class="number">13</span><span>)&nbsp;SIGPIPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">14</span><span>)&nbsp;SIGALRM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">15</span><span>)&nbsp;SIGTERM&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">16</span><span>)&nbsp;SIGUSR1 &nbsp;&nbsp;</span></span></li>
    <li><span class="number">17</span><span>)&nbsp;SIGUSR2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">18</span><span>)&nbsp;SIGCHLD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">19</span><span>)&nbsp;SIGPWR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">20</span><span>)&nbsp;SIGWINCH &nbsp;&nbsp;</span></span></li>
    <li><span class="number">21</span><span>)&nbsp;SIGURG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">22</span><span>)&nbsp;SIGIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">23</span><span>)&nbsp;SIGSTOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">24</span><span>)&nbsp;SIGTSTP &nbsp;&nbsp;</span></span></li>
    <li><span class="number">25</span><span>)&nbsp;SIGCONT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">26</span><span>)&nbsp;SIGTTIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">27</span><span>)&nbsp;SIGTTOU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">28</span><span>)&nbsp;SIGVTALRM &nbsp;&nbsp;</span></span></li>
    <li><span class="number">29</span><span>)&nbsp;SIGPROF&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">30</span><span>)&nbsp;SIGXCPU&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">31</span><span>)&nbsp;SIGXFSZ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">32</span><span>)&nbsp;SIGWAITING &nbsp;&nbsp;</span></span></li>
    <li><span class="number">33</span><span>)&nbsp;SIGLWP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">34</span><span>)&nbsp;SIGFREEZE&nbsp;&nbsp;&nbsp;</span><span class="number">35</span><span>)&nbsp;SIGTHAW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">36</span><span>)&nbsp;SIGCANCEL &nbsp;&nbsp;</span></span></li>
    <li><span class="number">37</span><span>)&nbsp;SIGLOST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">41</span><span>)&nbsp;SIGRTMIN&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">42</span><span>)&nbsp;SIGRTMIN+</span><span class="number">1</span><span>&nbsp;&nbsp;</span><span class="number">43</span><span>)&nbsp;SIGRTMIN+</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">44</span><span>)&nbsp;SIGRTMIN+</span><span class="number">3</span><span>&nbsp;&nbsp;</span><span class="number">45</span><span>)&nbsp;SIGRTMAX-</span><span class="number">3</span><span>&nbsp;&nbsp;</span><span class="number">46</span><span>)&nbsp;SIGRTMAX-</span><span class="number">2</span><span>&nbsp;&nbsp;</span><span class="number">47</span><span>)&nbsp;SIGRTMAX-</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="number">48</span><span>)&nbsp;SIGRTMAX&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE
9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS
13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGUSR1
17) SIGUSR2     18) SIGCHLD     19) SIGPWR      20) SIGWINCH
21) SIGURG      22) SIGIO       23) SIGSTOP     24) SIGTSTP
25) SIGCONT     26) SIGTTIN     27) SIGTTOU     28) SIGVTALRM
29) SIGPROF     30) SIGXCPU     31) SIGXFSZ     32) SIGWAITING
33) SIGLWP      34) SIGFREEZE   35) SIGTHAW     36) SIGCANCEL
37) SIGLOST     41) SIGRTMIN    42) SIGRTMIN+1  43) SIGRTMIN+2
44) SIGRTMIN+3  45) SIGRTMAX-3  46) SIGRTMAX-2  47) SIGRTMAX-1
48) SIGRTMAX</pre>
<br />
<br />
<br />
通常我们需要忽略的信号有四个，即：HUP, INT, QUIT, TSTP，也就是信号1, 2, 3, 24使用这样的语句可以使这些中断信号被忽略： <br />
trap "" 1 2 3 24 或 trap "" HUP INT QUIT TSTP <br />
用 trap ：1 2 3 24 或 trap HUP INT QUIT TSTP使其回复默认值。 <br />
用stty -a可以列出中断信号与键盘的对应，分别执行上面的命令后，运行 <br />
tail -f /etc/passwd, 然后尝试用键盘中断，试试两种情况（默认和忽略）下有何不同。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438130#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;stty&nbsp;-a &nbsp;&nbsp;</span></span></li>
    <li><span>speed&nbsp;</span><span class="number">9600</span><span>&nbsp;baud; &nbsp;&nbsp;</span></span></li>
    <li><span>rows&nbsp;=&nbsp;</span><span class="number">24</span><span>;&nbsp;columns&nbsp;=&nbsp;</span><span class="number">82</span><span>;&nbsp;ypixels&nbsp;=&nbsp;</span><span class="number">0</span><span>;&nbsp;xpixels&nbsp;=&nbsp;</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>csdata&nbsp;? &nbsp;&nbsp;</span></li>
    <li><span>eucw&nbsp;</span><span class="number">1</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>,&nbsp;scrw&nbsp;</span><span class="number">1</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>:</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>intr&nbsp;=&nbsp;^c;&nbsp;quit&nbsp;=&nbsp;^\;&nbsp;erase&nbsp;=&nbsp;^?;&nbsp;kill&nbsp;=&nbsp;^u; &nbsp;&nbsp;</span></li>
    <li><span>eof&nbsp;=&nbsp;^d;&nbsp;eol&nbsp;=&nbsp;&lt;undef&gt;;&nbsp;eol2&nbsp;=&nbsp;&lt;undef&gt;;&nbsp;swtch&nbsp;=&nbsp;&lt;undef&gt;; &nbsp;&nbsp;</span></li>
    <li><span>start&nbsp;=&nbsp;^q;&nbsp;stop&nbsp;=&nbsp;^s;&nbsp;susp&nbsp;=&nbsp;^z;&nbsp;dsusp&nbsp;=&nbsp;^y; &nbsp;&nbsp;</span></li>
    <li><span>rprnt&nbsp;=&nbsp;^r;&nbsp;flush&nbsp;=&nbsp;^o;&nbsp;werase&nbsp;=&nbsp;^w;&nbsp;lnext&nbsp;=&nbsp;^v; &nbsp;&nbsp;</span></li>
    <li><span>-parenb&nbsp;-parodd&nbsp;cs8&nbsp;-cstopb&nbsp;-hupcl&nbsp;cread&nbsp;-clocal&nbsp;-loblk&nbsp;-crtscts&nbsp;-crtsxoff&nbsp;-parext &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>-ignbrk&nbsp;brkint&nbsp;-ignpar&nbsp;-parmrk&nbsp;-inpck&nbsp;-istrip&nbsp;-inlcr&nbsp;-igncr&nbsp;icrnl&nbsp;-iuclc &nbsp;&nbsp;</span></li>
    <li><span>ixon&nbsp;-ixany&nbsp;-ixoff&nbsp;imaxbel &nbsp;&nbsp;</span></li>
    <li><span>isig&nbsp;icanon&nbsp;-xcase&nbsp;echo&nbsp;echoe&nbsp;echok&nbsp;-echonl&nbsp;-noflsh &nbsp;&nbsp;</span></li>
    <li><span>-tostop&nbsp;echoctl&nbsp;-echoprt&nbsp;echoke&nbsp;-defecho&nbsp;-flusho&nbsp;-pendin&nbsp;iexten &nbsp;&nbsp;</span></li>
    <li><span>opost&nbsp;-olcuc&nbsp;onlcr&nbsp;-ocrnl&nbsp;-onocr&nbsp;-onlret&nbsp;-ofill&nbsp;-ofdel&nbsp;tab3&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ stty -a
speed 9600 baud;
rows = 24; columns = 82; ypixels = 0; xpixels = 0;
csdata ?
eucw 1:0:0:0, scrw 1:0:0:0
intr = ^c; quit = ^\; erase = ^?; kill = ^u;
eof = ^d; eol = &lt;undef&gt;; eol2 = &lt;undef&gt;; swtch = &lt;undef&gt;;
start = ^q; stop = ^s; susp = ^z; dsusp = ^y;
rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;
-parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk -crtscts -crtsxoff -parext
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc
ixon -ixany -ixoff imaxbel
isig icanon -xcase echo echoe echok -echonl -noflsh
-tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten
opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel tab3</pre>
<br />
<br />
更方便的是我们可以用在shell中用trap定义我们自己的信号处理程序，就象在c中用signal一样， <br />
<br />
如：trap &#8220;echo 'GO Away'&#8221; INT <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/438130#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>zj@zj:~/Script/test$&nbsp;cat&nbsp;reboot.sh &nbsp;&nbsp;</span></span></li>
    <li><span>#/bin/bash &nbsp;&nbsp;</span></li>
    <li><span>i=</span><span class="number">0</span><span>; &nbsp;&nbsp;</span></span></li>
    <li><span>while((&nbsp;</span><span class="number">1</span><span>&nbsp;)) &nbsp;&nbsp;</span></span></li>
    <li><span>do &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;</span><span class="string">"hello&nbsp;$i"</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>sleep&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>((&nbsp;i++&nbsp;)) &nbsp;&nbsp;</span></li>
    <li><span>trap&nbsp;</span><span class="string">"bash&nbsp;$0&nbsp;&amp;&amp;&nbsp;kill&nbsp;$$"</span><span>&nbsp;QUIT &nbsp;&nbsp;</span></span></li>
    <li><span>done &nbsp;&nbsp;</span></li>
    <li><span>echo&nbsp;haha &nbsp;&nbsp;</span></li>
    <li><span>zj@zj:~/Script/test$&nbsp;./reboot.sh &nbsp;&nbsp;</span></li>
    <li><span>hello&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;</span><span class="number">3</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>Quit &nbsp;&nbsp;</span></li>
    <li><span>hello&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;</span><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>Quit &nbsp;&nbsp;</span></li>
    <li><span>hello&nbsp;</span><span class="number">0</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">zj@zj:~/Script/test$ cat reboot.sh
#/bin/bash
i=0;
while(( 1 ))
do
echo "hello $i"
sleep 1
(( i++ ))
trap "bash $0 &amp;&amp; kill $$" QUIT
done
echo haha
zj@zj:~/Script/test$ ./reboot.sh
hello 0
hello 1
hello 2
hello 3
Quit
hello 0
hello 1
hello 2
Quit
hello 0</pre>
这样^\就可以reboot程序了^_^不知道linux重启是不是trap到某个信号了就这样...当然是类似,这个脚本太east了.有时间加机会了看看^_^ <br />
<br />
附： <br />
Linux信号简介 　 <br />
1) SIGHUP 本信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. 　　 <br />
2) SIGINT 程序终止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发出 　　 <br />
3) SIGQUIT 和SIGINT类似, 但由QUIT字符(通常是Ctrl-\)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号. 　　 <br />
4) SIGILL 执行了非法指令. 通常是因为可执行文件本身出现错误, 或者试图执行数据段. 堆栈溢出时也有可能产生这个信号. 　　 <br />
5) SIGTRAP 由断点指令或其它trap指令产生. 由debugger使用. 　　 <br />
6) SIGABRT 程序自己发现错误并调用abort时产生. 　　 <br />
7) SIGIOT 在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样. 　　 <br />
8) SIGBUS 非法地址, 包括内存地址对齐(alignment)出错. eg: 访问一个四个字长的整数, 但其地址不是4的倍数. 　　 <br />
9) SIGFPE 在发生致命的算术运算错误时发出. 不仅包括浮点运算错误, 还包括溢出及除数为0等其它所有的算术的错误. 　　 <br />
<span style="color: red">10) SIGKILL 用来立即结束程序的运行. 本信号不能被阻塞, 处理和忽略. </span>　　 <br />
11) SIGUSR1 留给用户使用 　　 <br />
12) SIGSEGV 试图访问未分配给自己的内存, 或试图往没有写权限的内存地址写数据. 　　 <br />
13) SIGUSR2 留给用户使用 　　 <br />
14) SIGPIPE Broken pipe 　　 <br />
15) SIGALRM 时钟定时信号, 计算的是实际的时间或时钟时间. alarm函数使用该信号.　 <br />
<span style="color: red">16) SIGTERM 程序结束(terminate)信号, 与SIGKILL不同的是该信号可以被阻塞和处理. 通常用来要求程序自己正常退出. shell命令kill缺省产生这个信号. </span>　　 <br />
17) SIGCHLD 子进程结束时, 父进程会收到这个信号. 　　 <br />
18) SIGCONT 让一个停止(stopped)的进程继续执行. 本信号不能被阻塞. 可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的工作. 例如, 重新显示提示符 　　 <br />
19) SIGSTOP 停止(stopped)进程的执行. 注意它和terminate以及interrupt的区别: 该进程还未结束, 只是暂停执行. 本信号不能被阻塞, 处理或忽略. 　　 <br />
20) SIGTSTP 停止进程的运行, 但该信号可以被处理和忽略. 用户键入SUSP字符时(通常是Ctrl-Z)发出这个信号 　　 <br />
21) SIGTTIN 当后台作业要从用户终端读数据时, 该作业中的所有进程会收到SIGTTIN信号. 缺省时这些进程会停止执行. 　　 <br />
22) SIGTTOU 类似于SIGTTIN, 但在写终端(或修改终端模式)时收到. 　　 <br />
23) SIGURG 有紧急数据或out-of-band数据到达socket时产生. 　　 <br />
24) SIGXCPU 超过CPU时间资源限制. 这个限制可以由getrlimit/setrlimit来读取/改变 　　 <br />
25) SIGXFSZ 超过文件大小资源限制. 　　 <br />
26) SIGVTALRM 虚拟时钟信号. 类似于SIGALRM, 但是计算的是该进程占用的CPU时间. <br />
27) SIGPROF 类似于SIGALRM/SIGVTALRM, 但包括该进程用的CPU时间以及系统调用的时间. 　　 <br />
28) SIGWINCH 窗口大小改变时发出. 　　 <br />
29) SIGIO 文件描述符准备就绪, 可以开始进行输入/输出操作. 　　 <br />
30) SIGPWR Power failure </div>
 <img src ="http://www.blogjava.net/jzone/aggbug/304082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:58 <a href="http://www.blogjava.net/jzone/articles/304082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ulimit命令详解</title><link>http://www.blogjava.net/jzone/articles/304081.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:57:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304081.html</guid><description><![CDATA[<h3 class="type_reprint" title="转载"><a href="http://shihaiyang.javaeye.com/blog/438121"></a>&nbsp;</h3>
<div class="blog_content">原文地址：http://www.diybl.com/course/6_system/linux/linuxjq/20081117/151630.html <br />
<br />
1,说明: <br />
ulimit用于shell启动进程所占用的资源. <br />
2,类别: <br />
shell内建命令 <br />
3,语法格式: <br />
ulimit [-acdfHlmnpsStvw] [size] <br />
4,参数介绍: <br />
-H 设置硬件资源限制. <br />
-S 设置软件资源限制. <br />
-a 显示当前所有的资源限制. <br />
-c size:设置core文件的最大值.单位:blocks <br />
-d size:设置数据段的最大值.单位:kbytes <br />
-f size:设置创建文件的最大值.单位:blocks <br />
-l size:设置在内存中锁定进程的最大值.单位:kbytes <br />
-m size:设置可以使用的常驻内存的最大值.单位:kbytes <br />
-n size:设置内核可以同时打开的文件描述符的最大值.单位:n <br />
-p size:设置管道缓冲区的最大值.单位:kbytes <br />
-s size:设置堆栈的最大值.单位:kbytes <br />
-t size:设置CPU使用时间的最大上限.单位:seconds <br />
-v size:设置虚拟内存的最大值.单位:kbytes 5,简单实例: <br />
5.举例 <br />
在Linux下写程序的时候，如果程序比较大，经常会遇到&#8220;段错误&#8221;（segmentation fault）这样的问题，这主要就是由于Linux系统初始的堆栈大小（stack size）太小的缘故，一般为10M。我一般把stack size设置成256M，这样就没有段错误了！命令为： <br />
ulimit&nbsp;&nbsp; -s 262140 <br />
如果要系统自动记住这个配置，就编辑/etc/profile文件，在 &#8220;ulimit -S -c 0 &gt; /dev/null 2&gt;&amp;1&#8221;行下，添加&#8220;ulimit&nbsp;&nbsp; -s 262140&#8221;，保存重启系统就可以了！ <br />
1]在RH8的环境文件/etc/profile中,我们可以看到系统是如何配置ulimit的: <br />
#grep ulimit /etc/profile <br />
ulimit -S -c 0 &gt; /dev/null 2&gt;&amp;1 <br />
这条语句设置了对软件资源和对core文件大小的设置 <br />
2]如果我们想要对由shell创建的文件大小作些限制,如: <br />
#ll h <br />
-rw-r--r-- 1 lee lee 150062 7月 22 02:39 h <br />
#ulimit -f 100 #设置创建文件的最大块(一块=512字节) <br />
#cat h&gt;newh <br />
File size limit exceeded <br />
#ll newh <br />
-rw-r--r-- 1 lee lee 51200 11月 8 11:47 newh <br />
文件h的大小是150062字节,而我们设定的创建文件的大小是512字节x100块=51200字节 <br />
当然系统就会根据你的设置生成了51200字节的newh文件. <br />
3]可以像实例1]一样,把你要设置的ulimit放在/etc/profile这个环境文件中. <br />
用途 <br />
设置或报告用户资源极限。 <br />
语法 <br />
ulimit [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [ -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ] <br />
描述 <br />
ulimit 命令设置或报告用户进程资源极限，如 /etc/security/limits 文件所定义。文件包含以下缺省值极限： <br />
fsize = 2097151 <br />
core = 2097151 <br />
cpu = -1 <br />
data = 262144 <br />
rss = 65536 <br />
stack = 65536 <br />
nofiles = 2000 <br />
当新用户添加到系统中时，这些值被作为缺省值使用。当向系统中添加用户时，以上值通过 mkuser 命令设置，或通过 chuser 命令更改。 <br />
极限分为软性或硬性。通过 ulimit 命令，用户可将软极限更改到硬极限的最大设置值。要更改资源硬极限，必须拥有 root 用户权限。 <br />
很多系统不包括以上一种或数种极限。 特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字，或者为值 unlimited。要将特定的 ulimit 设置为 unlimited，可使用词 unlimited。 <br />
&nbsp;&nbsp;&nbsp; 注：在 /etc/security/limits 文件中设置缺省极限就是设置了系统宽度极限， 而不仅仅是创建用户时用户所需的极限。 <br />
省略 Limit 参数时，将会打印出当前资源极限。除非用户指定 -H 标志，否则打印出软极限。当用户指定一个以上资源时，极限名称和单元在值之前打印。如果未给予选项，则假定带有了 -f 标志。 <br />
由于 ulimit 命令影响当前 shell 环境，所以它将作为 shell 常规内置命令提供。如果在独立的命令执行环境中调用该命令，则不影响调用者环境的文件大小极限。以下示例中正是这种情况： <br />
nohup ulimit -f 10000 <br />
env ulimit 10000 <br />
一旦通过进程减少了硬极限，若无 root 特权则无法增加，即使返回到原值也不可能。 <br />
关于用户和系统资源极限的更多信息，请参见 AIX 5L Version 5.3 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimit、setrlimit 或 vlimit 子例程。 <br />
标志 <br />
-a&nbsp;&nbsp;&nbsp;&nbsp; 列出所有当前资源极限。 <br />
-c&nbsp;&nbsp;&nbsp;&nbsp; 以 512 字节块为单位，指定核心转储的大小。 <br />
-d&nbsp;&nbsp;&nbsp;&nbsp; 以 K 字节为单位指定数据区域的大小。 <br />
-f&nbsp;&nbsp;&nbsp;&nbsp; 使用 Limit 参数时设定文件大小极限（以块计），或者在未指定参数时报告文件大小极限。缺省值为 -f 标志。 <br />
-H&nbsp;&nbsp;&nbsp;&nbsp; 指定设置某个给定资源的硬极限。如果用户拥有 root 用户权限，可以增大硬极限。任何用户均可减少硬极限。 <br />
-m&nbsp;&nbsp;&nbsp;&nbsp; 以 K 字节为单位指定物理存储器的大小。 <br />
-n&nbsp;&nbsp;&nbsp;&nbsp; 指定一个进程可以拥有的文件描述符的数量的极限。 <br />
-s&nbsp;&nbsp;&nbsp;&nbsp; 以 K 字节为单位指定堆栈的大小。 <br />
-S&nbsp;&nbsp;&nbsp;&nbsp; 指定为给定的资源设置软极限。软极限可增大到硬极限的值。如果 -H 和 -S 标志均未指定，极限适用于以上二者。 <br />
-t&nbsp;&nbsp;&nbsp;&nbsp; 指定每个进程所使用的秒数。 <br />
退出状态 <br />
返回以下退出值： <br />
0&nbsp;&nbsp;&nbsp;&nbsp; 成功完成。 <br />
&gt;0&nbsp;&nbsp;&nbsp;&nbsp; 拒绝对更高的极限的请求，或发生错误。 <br />
示例 <br />
要将文件大小极限设置为 51,200 字节，输入： <br />
ulimit -f 100 <br />
文章出处：http://www.diybl.com/course/6_system/linux/linuxjq/20081117/151630.html </div>
 <img src ="http://www.blogjava.net/jzone/aggbug/304081.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:57 <a href="http://www.blogjava.net/jzone/articles/304081.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sed用法介绍</title><link>http://www.blogjava.net/jzone/articles/304077.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:54:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304077.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/436327"></a>&nbsp;</h3>
<div class="blog_content">输出第1行到第3行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;-n&nbsp;</span><span class="string">'1,3p'</span><span>&nbsp;sed.txt &nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>wangmin803&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">29</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">18</span><span>&nbsp;&nbsp;(</span><span class="number">219.149</span><span>.</span><span class="number">138.142</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>majorchan&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">29</span><span>&nbsp;</span><span class="number">15</span><span>:</span><span class="number">18</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">202.203</span><span>.</span><span class="number">137.236</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ sed -n '1,3p' sed.txt
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
wangmin803   pts/16       Jul 29 14:18  (219.149.138.142)
majorchan   pts/21       Jul 29 15:18   (202.203.137.236)</pre>
<br />
<br />
输出第2行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;-n&nbsp;</span><span class="string">'2p'</span><span>&nbsp;sed.txt &nbsp;&nbsp;</span></span></li>
    <li><span>wangmin803&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">29</span><span>&nbsp;</span><span class="number">14</span><span>:</span><span class="number">18</span><span>&nbsp;&nbsp;(</span><span class="number">219.149</span><span>.</span><span class="number">138.142</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ sed -n '2p' sed.txt
wangmin803   pts/16       Jul 29 14:18  (219.149.138.142)</pre>
<br />
<br />
查找含有tomotoboy的行让后输出 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;-n&nbsp;</span><span class="string">'/tomotoboy/'</span><span>p&nbsp;sed.txt &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">45</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">29</span><span>&nbsp;</span><span class="number">13</span><span>:</span><span class="number">53</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">99.155</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">29</span><span>&nbsp;</span><span class="number">15</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">99.155</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">52</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">29</span><span>&nbsp;</span><span class="number">16</span><span>:</span><span class="number">20</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">99.155</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-bash-3.00$ sed -n '/tomotoboy/'p sed.txt
tomotoboy   pts/45       Jul 29 13:53   (219.221.99.155)
tomotoboy   pts/46       Jul 29 15:24   (219.221.99.155)
tomotoboy   pts/52       Jul 29 16:20   (219.221.99.155)</pre>
<br />
<br />
输出当前的所有用户 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who &nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)
guise      pts/21       Aug  7 17:56    (124.76.10.207)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
输出第一行到含有字符串tomotoboy的行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;sed&nbsp;-n&nbsp;</span><span class="string">'1,/tomotoboy/'</span><span>p &nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | sed -n '1,/tomotoboy/'p
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)</pre>
<br />
<br />
输出原文的同时，输出tomotoboy所在的行号 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>-/home/l/g/tomotoboy&nbsp;&gt;who|sed&nbsp;</span><span class="string">'/tomotoboy/'</span><span>= &nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">-/home/l/g/tomotoboy &gt;who|sed '/tomotoboy/'=
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
2
tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)
guise      pts/21       Aug  7 17:56    (124.76.10.207)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
输出含有tomotoboy的行的行号 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;sed&nbsp;-e&nbsp;</span><span class="string">'/tomotoboy/'</span><span>= &nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span class="number">2</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>kindy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(reverse.gdsz.cncnet.net) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | sed -e '/tomotoboy/'=
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
2
tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)
guise      pts/21       Aug  7 17:56    (124.76.10.207)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
kindy      pts/38       Aug  7 21:33    (reverse.gdsz.cncnet.net)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
输出第一行到最后一行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;sed&nbsp;-n&nbsp;</span><span class="string">'1,$p'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | sed -n '1,$p'
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)
guise      pts/21       Aug  7 17:56    (124.76.10.207)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
输出最后一行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|sed&nbsp;-n&nbsp;</span><span class="string">'$p'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who|sed -n '$p'
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
append.sed：sed脚本实现附加功能，将hello tomotoboy附件在tomotoboy所在行之后 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;append.sed &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sed&nbsp;-f &nbsp;&nbsp;</span></li>
    <li><span>/tomotoboy/&nbsp;a\ &nbsp;&nbsp;</span></li>
    <li><span>hello&nbsp;tomotoboy &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;who|&nbsp;append.sed &nbsp;&nbsp;</span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;tomotoboy &nbsp;&nbsp;</span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>kindy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">41</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(reverse.gdsz.cncnet.net) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat append.sed
#!/bin/sed -f
/tomotoboy/ a\
hello tomotoboy
/home/l/g/tomotoboy &gt;who| append.sed
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)
hello tomotoboy
guise      pts/21       Aug  7 17:56    (124.76.10.207)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
kindy      pts/38       Aug  7 21:41    (reverse.gdsz.cncnet.net)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
文本输出时，把tomotoboy替换成hello <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|sed&nbsp;</span><span class="string">'s/tomotoboy/hello/'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who|sed 's/tomotoboy/hello/'
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
hello   pts/16       Aug  7 21:24       (219.221.98.71)
guise      pts/21       Aug  7 17:56    (124.76.10.207)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
只输出被替换的行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|sed&nbsp;-n&nbsp;</span><span class="string">'s/tomotoboy/hello/p'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who|sed -n 's/tomotoboy/hello/p'
hello   pts/16       Aug  7 21:24       (219.221.98.71)</pre>
<br />
<br />
如果要附加或修改一个字符串，可以使用（&amp;）命令，&amp;命令保存发现模式以便重新调用它，然后把它放在替换字符串里面。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|sed&nbsp;-n&nbsp;</span><span class="string">'s/tomotoboy/hello&nbsp;&amp;/p'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>hello&nbsp;tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;who|sed&nbsp;-n&nbsp;</span><span class="string">'s/tomotoboy/&amp;&nbsp;my&nbsp;friend/p'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>tomotoboy&nbsp;my&nbsp;friend&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">24</span><span>&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who|sed -n 's/tomotoboy/hello &amp;/p'
hello tomotoboy   pts/16       Aug  7 21:24     (219.221.98.71)
/home/l/g/tomotoboy &gt;who|sed -n 's/tomotoboy/&amp; my friend/p'
tomotoboy my friend   pts/16       Aug  7 21:24 (219.221.98.71)</pre>
<br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>删除最后一行 &nbsp;&nbsp;</span></span></li>
    <li><span>bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;</span><span class="string">'$d'</span><span>&nbsp;sed.txt&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>删除第一到最后</span><span class="number">6</span><span>行 &nbsp;&nbsp;</span></span></li>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;</span><span class="string">'1,6d'</span><span>&nbsp;sed.txt&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>删除第一到最后一行 &nbsp;&nbsp;</span></li>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;</span><span class="string">'1,$d'</span><span>&nbsp;sed.txt&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>删除tomotoboy的行 &nbsp;&nbsp;</span></li>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;</span><span class="string">'/tomotoboy/d'</span><span>&nbsp;sed.txt&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>用seawolf替代tomotoboy &nbsp;&nbsp;</span></li>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;</span><span class="string">'s/tomotoboy/seawolf/'</span><span>&nbsp;sed.txt&nbsp; &nbsp;&nbsp;</span></span></li>
    <li><span>用seawolf替代tomotoboy然后输出到sed.out &nbsp;&nbsp;</span></li>
    <li><span>-bash-</span><span class="number">3.00</span><span>$&nbsp;sed&nbsp;</span><span class="string">'s/tomotoboy/seawolf/w&nbsp;sed.out'</span><span>&nbsp;sed.txt&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">删除最后一行
bash-3.00$ sed '$d' sed.txt
删除第一到最后6行
-bash-3.00$ sed '1,6d' sed.txt
删除第一到最后一行
-bash-3.00$ sed '1,$d' sed.txt
删除tomotoboy的行
-bash-3.00$ sed '/tomotoboy/d' sed.txt
用seawolf替代tomotoboy
-bash-3.00$ sed 's/tomotoboy/seawolf/' sed.txt
用seawolf替代tomotoboy然后输出到sed.out
-bash-3.00$ sed 's/tomotoboy/seawolf/w sed.out' sed.txt</pre>
<br />
<br />
看看我们写好了哪些sed脚本 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;ls&nbsp;-al|grep&nbsp;</span><span class="string">'sed$'</span><span>&nbsp;&nbsp;</span></span></li>
    <li><span>-rwxr--r--&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;tomotoboy&nbsp;member&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">45</span><span>&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">41</span><span>&nbsp;append.sed &nbsp;&nbsp;</span></span></li>
    <li><span>-rwxr--r--&nbsp;&nbsp;&nbsp;</span><span class="number">1</span><span>&nbsp;tomotoboy&nbsp;member&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">68</span><span>&nbsp;Jul&nbsp;</span><span class="number">30</span><span>&nbsp;</span><span class="number">16</span><span>:</span><span class="number">28</span><span>&nbsp;change.sed&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;ls -al|grep 'sed$'
-rwxr--r--   1 tomotoboy member        45 Aug  7 21:41 append.sed
-rwxr--r--   1 tomotoboy member        68 Jul 30 16:28 change.sed</pre>
<br />
看看change.sed的用途是什么？ <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;cat&nbsp;change.sed &nbsp;&nbsp;</span></span></li>
    <li><span>#!/bin/sed&nbsp;-f &nbsp;&nbsp;</span></li>
    <li><span>#change.sed &nbsp;&nbsp;</span></li>
    <li><span>/tomotoboy/&nbsp;c\ &nbsp;&nbsp;</span></li>
    <li><span>I&nbsp;love&nbsp;China,Ilove&nbsp;Wanzhi.&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;cat change.sed
#!/bin/sed -f
#change.sed
/tomotoboy/ c\
I love China,Ilove Wanzhi.</pre>
<br />
找到tomotoboy，替换为I love China,Ilove Wanzhi. <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/436327#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|change.sed &nbsp;&nbsp;</span></span></li>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>I&nbsp;love&nbsp;China,Ilove&nbsp;Wanzhi. &nbsp;&nbsp;</span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">17</span><span>:</span><span class="number">56</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">124.76</span><span>.</span><span class="number">10.207</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span></li>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span></li>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span></li>
</ol>
</div>
</div>
 <img src ="http://www.blogjava.net/jzone/aggbug/304077.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:54 <a href="http://www.blogjava.net/jzone/articles/304077.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>awk使用</title><link>http://www.blogjava.net/jzone/articles/304075.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304075.html</guid><description><![CDATA[<h3 class="" title="随笔"><a href="http://shihaiyang.javaeye.com/blog/435614"></a>&nbsp;</h3>
<div class="blog_content"><br />
调用awk有三种方式调用awk，第一种是命令行方式，如： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>awk&nbsp;[-F&nbsp;field-separator]&nbsp;</span><span class="string">'commands'</span><span>&nbsp;input-file(s)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">awk [-F field-separator] 'commands' input-file(s)</pre>
<br />
这里，commands是真正的awk命令。上面例子中，-F域分隔符]是可选的，因为a w k使用空格作为缺省的域分隔符，因此如果要浏览域间有空格的文本，不必指定这个选项，但如果要浏览诸如 passwd文件，此文件各域以冒号作为分隔符，则必须指明- F选项： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>awk&nbsp;-F:&nbsp;</span><span class="string">'commands'</span><span>&nbsp;input-file&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">awk -F: 'commands' input-file</pre>
第二种方法是将所有a w k命令插入一个文件，并使 a w k程序可执行，然后用a w k命令解释器作为脚本的首行，以便通过键入脚本名称来调用它。 <br />
第三种方式是将所有的awk命令插入一个单独文件，然后调用： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>awk&nbsp;-f&nbsp;awk_script_&nbsp;file&nbsp;input_file(s)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">awk -f awk_script_ file input_file(s)</pre>
- f选项指明在文件awk_script_ file中的a w k脚本，input_file(s)是使用awk进行浏览的文件名。 <br />
<br />
<strong>模式和动作</strong> <br />
任何awk语句都由模式和动作组成。在一个awk脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分，动作将时刻保持执行状态。模式可以是任何条件语句或复合语句或正则表达式。模式包括两个特殊字段BEGIN和END。使用BEGIN语句设置计数和打印头。BEGIN语句使用在任何文本浏览动作之前，之后文本浏览动作依据输入文件开始执行。 END语句用来在awk完成文本浏览动作后打印输出文本总数和结尾状态标志。如果不特别指明模式， awk总是匹配或打印行数。实际动作在大括号{ }内指明。动作大多数用来打印，但是还有些更长的代码诸如 if和循环（looping）语句及循环退出结构。如果不指明采取动作， awk将打印出所有浏览出来的记录。 <br />
<br />
<strong>域和记录</strong> <br />
awk执行时，其浏览域标记为$1，$2 . . . $n。这种方法称为域标识。使用这些域标识将更容易对域进行进一步处理。使用$1,$3表示参照第1和第3域，注意这里用逗号做域分隔。如果希望打印一个有5个域的记录的所有域，不必指明 $1,$2,$3,$4 ,$5，可使用$0，意即所有域。awk浏览时，到达一新行，即假定到达包含域的记录末尾，然后执行新记录下一行的读动作，并重新设置域分隔。注意执行时不要混淆符号$和shell提示符$，它们是不同的。 <br />
<br />
<strong>打印所有域的信息</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who &nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">10</span><span>&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;</span><span class="string">'{print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">10</span><span>&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">21</span><span>:</span><span class="number">13</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">58.41</span><span>.</span><span class="number">162.27</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)
liuqingaihn   pts/21       Aug  7 23:10 (116.29.229.116)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)
/home/l/g/tomotoboy &gt;who | awk '{print $0}'
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)
liuqingaihn   pts/21       Aug  7 23:10 (116.29.229.116)
guise      pts/35       Aug  7 21:13    (58.41.162.27)
uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
<strong>抽取第一域，并打印出来：</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|awk&nbsp;</span><span class="string">'{print&nbsp;$1}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>liuzk423 &nbsp;&nbsp;</span>
    <li><span>tomotoboy &nbsp;&nbsp;</span>
    <li><span>liuqingaihn &nbsp;&nbsp;</span>
    <li><span>guise &nbsp;&nbsp;</span>
    <li><span>uyty &nbsp;&nbsp;</span>
    <li><span>yagamil&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who|awk '{print $1}'
liuzk423
tomotoboy
liuqingaihn
guise
uyty
yagamil</pre>
<br />
<br />
<strong>打印第一域、第三域</strong>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;</span><span class="string">'{print&nbsp;$1"\t"$3}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul &nbsp;&nbsp;</span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>guise&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk '{print $1"\t"$3}'
liuzk423        Jul
tomotoboy       Aug
liuqingaihn     Aug
guise           Aug
uyty            Aug
yagamil         Aug</pre>
<br />
<br />
<strong>打印信息头和信息尾</strong>
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'BEGIN&nbsp;{print&nbsp;"--------BEGIN-------\n"}&nbsp;{print&nbsp;$1"\t"$3}&nbsp;END&nbsp;{print&nbsp;"----------END-------"}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>--------BEGIN------- &nbsp;&nbsp;</span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul &nbsp;&nbsp;</span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>guise&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>kenhq&nbsp;&nbsp;&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>yagamil&nbsp;Aug &nbsp;&nbsp;</span>
    <li><span>----------END-------&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  'BEGIN {print "--------BEGIN-------\n"} {print $1"\t"$3} END {print "----------END-------"}'
--------BEGIN-------
liuzk423        Jul
tomotoboy       Aug
liuqingaihn     Aug
guise   Aug
uyty    Aug
kenhq   Aug
yagamil Aug
----------END-------</pre>
<br />
<br />
<strong>如果第一个域等于tomotoboy</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'{if&nbsp;($1~/tomotoboy/)&nbsp;print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '{if ($1~/tomotoboy/) print $0}'
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)</pre>
<br />
<br />
<strong>如果行的域中包含tomotoboy就打印它</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'$0&nbsp;~/tomotoboy/'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '$0 ~/tomotoboy/'
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)</pre>
<br />
<br />
<strong>不匹配</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'{if&nbsp;($1!~/tomotoboy/)&nbsp;print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span>
    <li><span>kenhq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">40</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">116.77</span><span>.</span><span class="number">50.7</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'$0&nbsp;&nbsp;!~/tomotoboy/'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">54</span><span>&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span>
    <li><span>kenhq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">40</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">116.77</span><span>.</span><span class="number">50.7</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '{if ($1!~/tomotoboy/) print $0}'
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)
kenhq      pts/40       Aug  7 23:46    (116.77.50.7)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)
/home/l/g/tomotoboy &gt;who | awk  '$0  !~/tomotoboy/'
liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)
liuqingaihn   pts/21       Aug  7 23:54 (116.29.229.116)
uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)
kenhq      pts/40       Aug  7 23:46    (116.77.50.7)
yagamil    pts/46       Aug  7 20:48    (199.40.206.191)</pre>
<br />
<br />
<strong>行首</strong> <br />
打印行首包含to的行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'/^to/'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '/^to/'
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)</pre>
<br />
<strong>AND</strong> <br />
打印第一域为tomotoboy，第三域为Aug的行 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'{if&nbsp;($1=/tomotoboy/&nbsp;&amp;&amp;&nbsp;$2=/Aug/)&nbsp;print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>awk:&nbsp;syntax&nbsp;error&nbsp;near&nbsp;line&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>awk:&nbsp;illegal&nbsp;statement&nbsp;near&nbsp;line&nbsp;</span><span class="number">1</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'{if&nbsp;($1~/tomotoboy/&nbsp;&amp;&amp;&nbsp;$3~/Aug/)&nbsp;print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '{if ($1=/tomotoboy/ &amp;&amp; $2=/Aug/) print $0}'
awk: syntax error near line 1
awk: illegal statement near line 1
/home/l/g/tomotoboy &gt;who | awk  '{if ($1~/tomotoboy/ &amp;&amp; $3~/Aug/) print $0}'
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)</pre>
<br />
<strong>注意区分&#8220;=&#8221;与&#8220;==&#8221;，获得两种截然不同的结果</strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'{if&nbsp;($1="tomotoboy"&nbsp;&amp;&amp;&nbsp;$3="Aug")&nbsp;print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">6</span><span>&nbsp;Aug&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">16</span><span>&nbsp;Aug&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">21</span><span>&nbsp;Aug&nbsp;</span><span class="number">8</span><span>&nbsp;</span><span class="number">00</span><span>:</span><span class="number">05</span><span>&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">35</span><span>&nbsp;Aug&nbsp;</span><span class="number">8</span><span>&nbsp;</span><span class="number">00</span><span>:</span><span class="number">05</span><span>&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">38</span><span>&nbsp;Aug&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">40</span><span>&nbsp;Aug&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">46</span><span>&nbsp;(</span><span class="number">116.77</span><span>.</span><span class="number">50.7</span><span>) &nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;pts/</span><span class="number">46</span><span>&nbsp;Aug&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '{if ($1="tomotoboy" &amp;&amp; $3="Aug") print $0}'
tomotoboy pts/6 Aug 20 08:27 (219.245.104.240)
tomotoboy pts/16 Aug 7 23:33 (219.221.98.71)
tomotoboy pts/21 Aug 8 00:05 (116.29.229.116)
tomotoboy pts/35 Aug 8 00:05 (116.29.229.116)
tomotoboy pts/38 Aug 7 22:09 (p3213-ipbf803souka.saitama.ocn.ne.jp)
tomotoboy pts/40 Aug 7 23:46 (116.77.50.7)
tomotoboy pts/46 Aug 7 20:48 (199.40.206.191)</pre>
<br />
<br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|&nbsp;awk&nbsp;&nbsp;</span><span class="string">'{if&nbsp;($1=="tomotoboy"&nbsp;&amp;&amp;&nbsp;$3=="Aug")&nbsp;print&nbsp;$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who | awk  '{if ($1=="tomotoboy" &amp;&amp; $3=="Aug") print $0}'
tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)</pre>
<br />
<br />
<strong><span style="font-size: medium">awk内置变量</span></strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|awk&nbsp;</span><span class="string">'{print&nbsp;NF,NR,$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">1</span><span>&nbsp;liuzk423&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jul&nbsp;</span><span class="number">20</span><span>&nbsp;</span><span class="number">08</span><span>:</span><span class="number">27</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.245</span><span>.</span><span class="number">104.240</span><span>) &nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">2</span><span>&nbsp;tomotoboy&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">33</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">219.221</span><span>.</span><span class="number">98.71</span><span>) &nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">3</span><span>&nbsp;liuqingaihn&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">8</span><span>&nbsp;</span><span class="number">00</span><span>:</span><span class="number">05</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">4</span><span>&nbsp;liuqingaihn&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">8</span><span>&nbsp;</span><span class="number">00</span><span>:</span><span class="number">05</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">116.29</span><span>.</span><span class="number">229.116</span><span>) &nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">5</span><span>&nbsp;uyty&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">38</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">22</span><span>:</span><span class="number">09</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(p3213-ipbf803souka.saitama.ocn.ne.jp) &nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">6</span><span>&nbsp;kenhq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">40</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">23</span><span>:</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">116.77</span><span>.</span><span class="number">50.7</span><span>) &nbsp;&nbsp;</span></span>
    <li><span class="number">6</span><span>&nbsp;</span><span class="number">7</span><span>&nbsp;yagamil&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Aug&nbsp;&nbsp;</span><span class="number">7</span><span>&nbsp;</span><span class="number">20</span><span>:</span><span class="number">48</span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(</span><span class="number">199.40</span><span>.</span><span class="number">206.191</span><span>)&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who|awk '{print NF,NR,$0}'
6 1 liuzk423   pts/6        Jul 20 08:27        (219.245.104.240)
6 2 tomotoboy   pts/16       Aug  7 23:33       (219.221.98.71)
6 3 liuqingaihn   pts/21       Aug  8 00:05     (116.29.229.116)
6 4 liuqingaihn   pts/35       Aug  8 00:05     (116.29.229.116)
6 5 uyty       pts/38       Aug  7 22:09        (p3213-ipbf803souka.saitama.ocn.ne.jp)
6 6 kenhq      pts/40       Aug  7 23:46        (116.77.50.7)
6 7 yagamil    pts/46       Aug  7 20:48        (199.40.206.191)</pre>
<br />
<br />
<strong><span style="font-size: medium">awk内置字符串函数</span></strong> <br />
awk内置字符串函数，awk又很多字符处理函数，这里以length为例 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|&nbsp;awk&nbsp;</span><span class="string">'{print&nbsp;length($1)"&nbsp;"$1}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">8</span><span>&nbsp;liuzk423 &nbsp;&nbsp;</span></span>
    <li><span class="number">9</span><span>&nbsp;tomotoboy &nbsp;&nbsp;</span></span>
    <li><span class="number">11</span><span>&nbsp;liuqingaihn &nbsp;&nbsp;</span></span>
    <li><span class="number">11</span><span>&nbsp;liuqingaihn &nbsp;&nbsp;</span></span>
    <li><span class="number">5</span><span>&nbsp;kenhq &nbsp;&nbsp;</span></span>
    <li><span class="number">7</span><span>&nbsp;yagamil&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who| awk '{print length($1)" "$1}'
8 liuzk423
9 tomotoboy
11 liuqingaihn
11 liuqingaihn
5 kenhq
7 yagamil</pre>
<br />
如果第一域的长度大于7就输出 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;who|&nbsp;awk&nbsp;</span><span class="string">'{if(length($1)&gt;7)&nbsp;print&nbsp;length($1)"&nbsp;"$1}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">8</span><span>&nbsp;liuzk423 &nbsp;&nbsp;</span></span>
    <li><span class="number">9</span><span>&nbsp;tomotoboy &nbsp;&nbsp;</span></span>
    <li><span class="number">11</span><span>&nbsp;liuqingaihn &nbsp;&nbsp;</span></span>
    <li><span class="number">11</span><span>&nbsp;liuqingaihn&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;who| awk '{if(length($1)&gt;7) print length($1)" "$1}'
8 liuzk423
9 tomotoboy
11 liuqingaihn
11 liuqingaihn</pre>
<br />
<br />
<strong><span style="font-size: medium">字符串屏蔽序列</span></strong> <br />
使用字符串或正则表达式时，有时需要在输出中加入一新行或查询一元字符。打印一新行时，（新行为字符\n） ，给出其屏蔽序列，以不失其特殊含义，用法为在字符串前加入反斜线。例如使用\n强迫打印一新行。如果使用正则表达式，查询花括号（{ }） ，在字符前加反斜线，如/ \ { /，将在awk中失掉其特殊含义。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>\b&nbsp;退格键&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\t&nbsp;tab键 &nbsp;&nbsp;</span></span>
    <li><span>\f&nbsp;走纸换页&nbsp;&nbsp;&nbsp;&nbsp;\ddd&nbsp;八进制值 &nbsp;&nbsp;</span>
    <li><span>\n&nbsp;新行&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\c&nbsp;任意其他特殊字符，例如\\为反斜线符号 &nbsp;&nbsp;</span>
    <li><span>\r&nbsp;回车键 &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;who&nbsp;|awk&nbsp;</span><span class="string">'{print&nbsp;$1"\t""\t"$2"\n"}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>liuzk423&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">6</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>tomotoboy&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">16</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">21</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>liuqingaihn&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">35</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>kenhq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">40</span><span>&nbsp;&nbsp;</span></span>
    <li><span>&nbsp;&nbsp;</span>
    <li><span>yagamil&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pts/</span><span class="number">46</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">\b 退格键      \t tab键
\f 走纸换页    \ddd 八进制值
\n 新行        \c 任意其他特殊字符，例如\\为反斜线符号
\r 回车键
/home/l/g/tomotoboy &gt;who |awk '{print $1"\t""\t"$2"\n"}'
liuzk423                pts/6
tomotoboy               pts/16
liuqingaihn             pts/21
liuqingaihn             pts/35
kenhq                   pts/40
yagamil                 pts/46</pre>
<br />
<br />
<strong><span style="font-size: medium">printf</span></strong> <br />
printf修饰符，prinf基本域C语言的printf相同下面开始举例 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;</span><span class="string">"65"</span><span>&nbsp;|awk&nbsp;</span><span class="string">'{printf&nbsp;"%c\n",$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>A &nbsp;&nbsp;</span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;</span><span class="string">"65"</span><span>&nbsp;|awk&nbsp;</span><span class="string">'{printf&nbsp;"%d\n",$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">65</span><span>&nbsp;&nbsp;</span></span>
    <li><span>/home/l/g/tomotoboy&nbsp;&gt;echo&nbsp;</span><span class="string">"65"</span><span>&nbsp;|awk&nbsp;</span><span class="string">'{printf&nbsp;"%c\t\t%d\n",$0,$0}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span>A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="number">65</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;echo "65" |awk '{printf "%c\n",$0}'
A
/home/l/g/tomotoboy &gt;echo "65" |awk '{printf "%d\n",$0}'
65
/home/l/g/tomotoboy &gt;echo "65" |awk '{printf "%c\t\t%d\n",$0,$0}'
A               65</pre>
<br />
<br />
<strong><span style="font-size: medium">awk数组</span></strong> <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Java代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-j">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;awk&nbsp;</span><span class="string">'BEGIN&nbsp;{print&nbsp;split("123#456#789",myarray,"#")}'</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">3</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="java" style="display: none" name="code">/home/l/g/tomotoboy &gt;awk 'BEGIN {print split("123#456#789",myarray,"#")}'
3</pre>
<br />
在上面的例子中，split返回数组myarray下标数。实际上myarray数组为： <br />
myarray[1]=123 <br />
myarray[2]=456 <br />
myarray[3]=789 <br />
数组使用前，不必定义，也不必指定数组元素个数。经常使用循环来访问数组。下面是一种循环类型的基本结构： <br />
For (element in array) print array[element] <br />
对于记录&#8220;123#456#789&#8221; ，先使用split函数划分它，再使用循环打印各数组元素。操作脚本如下： <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>#!/bin/awk&nbsp;-f &nbsp;&nbsp;</span></span>
    <li><span>#name:&nbsp;arraytest.awk &nbsp;&nbsp;</span>
    <li><span>#pprint&nbsp;out&nbsp;am&nbsp;array &nbsp;&nbsp;</span>
    <li><span>BEGIN{ &nbsp;&nbsp;</span>
    <li><span>record=</span><span class="string">"123#456#789"</span><span>; &nbsp;&nbsp;</span></span>
    <li><span>split(record,myarray,</span><span class="string">"#"</span><span>)} &nbsp;&nbsp;</span></span>
    <li><span>END&nbsp;{&nbsp;for&nbsp;(i&nbsp;in&nbsp;myarray)&nbsp;{print&nbsp;myarray[i]}}&nbsp;&nbsp;</span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">#!/bin/awk -f
#name: arraytest.awk
#pprint out am array
BEGIN{
record="123#456#789";
split(record,myarray,"#")}
END { for (i in myarray) {print myarray[i]}}
</pre>
<br />
要运行脚本，使用/dev/null作为输入文件。 <br />
<div class="dp-highlighter">
<div class="bar">
<div class="tools">Shell代码 <a title="复制代码" onclick="dp.sh.Toolbar.CopyToClipboard(this);return false;" href="http://shihaiyang.javaeye.com/blog/435614#"></a></div>
</div>
<ol class="dp-default">
    <li><span><span>/home/l/g/tomotoboy&nbsp;&gt;arraytest.awk&nbsp;/dev/null &nbsp;&nbsp;</span></span>
    <li><span class="number">456</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">789</span><span>&nbsp;&nbsp;</span></span>
    <li><span class="number">123</span><span>&nbsp;&nbsp;</span></span> </li>
</ol>
</div>
<pre class="shell" style="display: none" name="code">/home/l/g/tomotoboy &gt;arraytest.awk /dev/null
456
789
123</pre>
小结 <br />
awk语言学起来可能有些复杂，但使用它来编写一行命令或小脚本并不太难。awk是shell编程的一个重要工具。在shell命令或编程中，虽然可以使用awk强大的文本处理能力，但是并不要求你成为这方面的专家 </div>
 <img src ="http://www.blogjava.net/jzone/aggbug/304075.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:53 <a href="http://www.blogjava.net/jzone/articles/304075.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>grep用法详解</title><link>http://www.blogjava.net/jzone/articles/304072.html</link><dc:creator>Gavin.lee</dc:creator><author>Gavin.lee</author><pubDate>Sun, 29 Nov 2009 03:44:00 GMT</pubDate><guid>http://www.blogjava.net/jzone/articles/304072.html</guid><description><![CDATA[<p><strong>grep 指令<br />
<br />
</strong>grep -- print lines matching a pattern (将符合样式的该行列出) </p>
<p>◎语法: grep [options]&nbsp; PATTERN [FILE...] <br />
grep (globalsearch regular expression(RE) and print out theline,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具，它能使用正则表达式搜索文本，并把匹配的行打印出来。Unix的grep家族包括grep、 egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展，支持更多的re元字符，fgrep就是 fixed grep或fastgrep，它们把所有的字母都看作单词，也就是说，正则表达式中的元字符表示回其自身的字面意义，不再特殊。linux使用GNU版本的grep。它功能更强，可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。<br />
　　grep的工作方式是这样的，它在一个或多个文件中搜索字符串模板。如果模板包括空格，则必须被引用，模板后的所有字符串被看作文件名。搜索的结果被送到屏幕，不影响原文件内容。<br />
　　grep可用于<a class="infotextkey" href="http://www.xxlinux.com/linux/article/development/shell/" target="_blank">shell</a>脚本，因为grep通过返回一个状态值来说明搜索的状态，如果模板搜索成功，则返回0，如果搜索不成功，则返回1，如果搜索的文件不存在，则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。<br />
　　2. grep正则表达式元字符集(基本集)<br />
　　^<br />
　　锚定行的开始 如：'^grep'匹配所有以grep开头的行。<br />
　　$<br />
　　锚定行的结束 如：'grep$'匹配所有以grep结尾的行。<br />
　　匹配一个非换行符的字符 如：'gr.p'匹配gr后接一个任意字符，然后是p。<br />
　　*<br />
　　匹配零个或多个先前字符 如：'*grep'匹配所有一个或多个空格后紧跟grep的行。 .*一起用代表任意字符。<br />
　　[]<br />
　　匹配一个指定范围内的字符，如'[Gg]rep'匹配Grep和grep。<br />
　　[^]<br />
　　匹配一个不在指定范围内的字符，如：'[^A-FH-Z]rep'匹配不包含A-R和T-Z的一个字母开头，紧跟rep的行。<br />
　　(..)<br />
　　标记匹配字符，如'(love)'，love被标记为1。<br />
　　&lt;<br />
　　锚定单词的开始，如:'\&gt;<br />
　　锚定单词的结束，如'grep&gt;'匹配包含以grep结尾的单词的行。<br />
　　x{m}<br />
　　重复字符x，m次，如：'0{5}'匹配包含5个o的行。<br />
　　x{m,}<br />
　　重复字符x,至少m次，如：'o{5,}'匹配至少有5个o的行。<br />
　　x{m,n}<br />
　　重复字符x，至少m次，不多于n次，如：'o{5,10}'匹配5--10个o的行。<br />
　　w<br />
　　匹配文字和数字字符，也就是[A-Za-z0-9]，如：'Gw*p'匹配以G后跟零个或多个文字或数字字符，然后是p。<br />
　　W<br />
　　w的反置形式，匹配一个或多个非单词字符，如点号句号等。<br />
　　b<br />
　　单词锁定符，如: 'bgrepb'只匹配grep。<br />
　　3. 用于egrep和 grep -E的元字符扩展集<br />
　　+<br />
　　匹配一个或多个先前的字符。如：'[a-z]+able'，匹配一个或多个小写字母后跟able的串，如loveable,enable,disable等。<br />
　　?<br />
　　匹配零个或多个先前的字符。如：'gr?p'匹配gr后跟一个或没有字符，然后是p的行。<br />
　　a|b|c<br />
　　匹配a或b或c。如：grep|sed匹配grep或sed<br />
　　()<br />
　　分组符号，如：love(able|rs)ov+匹配loveable或lovers，匹配一个或多个ov。<br />
　　x{m},x{m,},x{m,n}<br />
　　作用同x{m},x{m,},x{m,n}<br />
　　4. POSIX字符类<br />
　　为了在不同国家的字符编码中保持一至，POSIX(The Portable Operating SystemInterface)增加了特殊的字符类，如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成为正则表达式，如[A-Za-z0-9]或[[: alnum:]]。在linux下的grep除fgrep外，都支持POSIX的字符类。<br />
　　[:alnum:]<br />
　　文字数字字符<br />
　　[:alpha:]<br />
　　文字字符<br />
　　[:digit:]<br />
　　数字字符<br />
　　[:graph:]<br />
　　非空字符(非空格、控制字符)<br />
　　[:lower:]<br />
　　小写字符<br />
　　[:cntrl:]<br />
　　控制字符<br />
　　[:print:]<br />
　　非空字符(包括空格)<br />
　　[:punct:]<br />
　　标点符号<br />
　　[:space:]<br />
　　所有空白字符(新行，空格，制表符)<br />
　　[:upper:]<br />
　　大写字符<br />
　　[:xdigit:]<br />
　　十六进制数字(0-9，a-f，A-F)<br />
　　5. Grep命令选项<br />
　　-?<br />
　　同时显示匹配行上下的？行，如：grep -2 pattern filename同时显示匹配行的上下2行。<br />
　　-b，--byte-offset<br />
　　打印匹配行前面打印该行所在的块号码。<br />
　　-c,--count<br />
　　只打印匹配的行数，不显示匹配的内容。<br />
　　-f File，--file=File<br />
　　从文件中提取模板。空文件中包含0个模板，所以什么都不匹配。<br />
　　-h，--no-filename<br />
　　当搜索多个文件时，不显示匹配文件名前缀。<br />
　　-i，--ignore-case<br />
　　忽略大小写差别。<br />
　　-q，--quiet<br />
　　取消显示，只返回退出状态。0则表示找到了匹配的行。<br />
　　-l，--files-with-matches<br />
　　打印匹配模板的文件清单。<br />
　　-L，--files-without-match<br />
　　打印不匹配模板的文件清单。<br />
　　-n，--line-number<br />
　　在匹配的行前面打印行号。<br />
　　-s，--silent<br />
　　不显示关于不存在或者无法读取文件的错误信息。<br />
　　-v，--revert-match<br />
　　反检索，只显示不匹配的行。<br />
　　-w，--word-regexp<br />
　　如果被&lt;和&gt;引用，就把表达式做为一个单词搜索。<br />
　　-V，--version<br />
　　显示软件版本信息。<br />
　　6. 实例<br />
　　要用好grep这个工具，其实就是要写好正则表达式，所以这里不对grep的所有功能进行实例讲解，只列几个例子，讲解一个正则表达式的写法。<br />
　　$ ls -l | grep '^a'<br />
　　通过管道过滤ls -l输出的内容，只显示以a开头的行。<br />
　　$ grep 'test' d*<br />
　　显示所有以d开头的文件中包含test的行。<br />
　　$ grep 'test' aa bb cc<br />
　　显示在aa，bb，cc文件中匹配test的行。<br />
　　$ grep '[a-z]{5}' aa<br />
　　显示所有包含每个字符串至少有5个连续小写字符的字符串的行。<br />
　　$ grep 'w(es)t.*1' aa<br />
　　如果west被匹配，则es就被存储到内存中，并标记为1，然后搜索任意个字符(.*)，这些字符后面紧跟着另外一个es(1)，找到就显示该行。如果用egrep或grep -E，就不用""号进行转义，直接写成'w(es)t.*1'就可以了。 </p>
<p><br />
默认情况下，&#8216;grep&#8217;只搜索当前目录。如果此目录下有许多子目录，&#8216;grep&#8217;会以如下形式列出：<br />
grep: sound: Is a directory <br />
这可能会使&#8216;grep&#8217;的输出难于阅读。这里有两种解决的办法： <br />
明确要求搜索子目录：grep -r <br />
或忽略子目录：grep -d skip <br />
当然，如果预料到有许多输出，您可以通过 管道 将其转到&#8216;less&#8217;上阅读：<br />
$ grep magic /usr/src/linux/Documentation/* | less <br />
这样，您就可以更方便地阅读。 <br />
<br />
有一点要注意，您必需提供一个文件过滤方式（搜索全部文件的话用 *）。如果您忘了，&#8216;grep&#8217;会一直等着，直到该程序被中断。如果您遇到了这样的情况，按 &lt;CTRL c&gt; ，然后再试。&nbsp;<br />
<br />
配合管道（|）进行搜索：<br />
grep -C number pattern files ：匹配的上下文分别显示[number]行， <br />
grep pattern1 | pattern2 files ：显示匹配 pattern1 或 pattern2 的行， <br />
grep pattern1 files | grep pattern2 ：显示既匹配 pattern1 又匹配 pattern2 的行。 <br />
<br />
用于搜索的特殊符号： <br />
\&lt; 和 \&gt; 分别标注单词的开始与结尾。 <br />
例如： <br />
grep man * 会匹配 &#8216;Batman&#8217;、&#8216;manic&#8217;、&#8216;man&#8217;等， <br />
grep '\&lt;man' * 匹配&#8216;manic&#8217;和&#8216;man&#8217;，但不是&#8216;Batman&#8217;， <br />
grep '\&lt;man\&gt;' 只匹配&#8216;man&#8217;，而不是&#8216;Batman&#8217;或&#8216;manic&#8217;等其他的字符串。 <br />
'^'：指匹配的字符串在行首， <br />
'$'：指匹配的字符串在行尾，<br />
<br />
===========================================================================================<br />
如果您不习惯命令行参数，可以试试图形界面的&#8216;grep&#8217;，如 reXgrep 。这个软件提供 AND、OR、NOT 等语法，还有漂亮的按钮 :-) 。如果您只是需要更清楚的输出，不妨试试 fungrep <br />
<strong><span style="font-size: larger">egrep</span> </strong><br />
egrep代表expression或extended grep，适情况而定。egrep接受所有的正则表达式，egrep的一个显著特性是可以以一个文件作为保存的字符串，然后将之传给egrep作为参数，为此使用- f开关。 <br />
===========================================================================================</p>
<div class="cnt">
<p><strong>grep命令是linux下的行过滤工具，其参数繁多</strong></p>
<p>◎参数<br />
&nbsp;&nbsp;&nbsp;&nbsp; 1. <font color="#0000ff">-A NUM，--after-context=NUM</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 除了列出符合行之外，并且列出后NUM行。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-A 1</font> panda file</strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (从file中搜寻有panda样式的行，并显示该行的后1行)<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;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 2. <font color="#0000ff">-a</font>或<font color="#0000ff">--text</font>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grep原本是搜寻文字文件，若拿二进制的档案作为搜寻的目标，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 则会显示如下的讯息: <font color="#008000">Binary file 二进制文件名 matches</font> 然后结束。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若加上<font color="#0000ff">-a</font>参数则可将二进制档案视为文本文件搜寻，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 相当于<font color="#0000ff">--binary-files=text</font>这个参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;&nbsp; (从二进制档案mv中去搜寻panda样式)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (错误!!!)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> panda <font color="#ff0000">mv</font></strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">Binary file mv matches</font>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (这表示此档案有match之处，详见--binary-files=TYPE )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (正确!!!)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-a</font> panda <font color="#ff0000">mv</font></strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 3. <font color="#0000ff">-B NUM，--before-context=NUM</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 与 -A NUM 相对，但这此参数是显示除符合行之外<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 并显示在它之前的NUM行。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;&nbsp; (从file中搜寻有panda样式的行，并显示该行的前1行)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-B 1</font> panda file</strong> <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 4. <font color="#0000ff">-C [NUM], -NUM, --context[=NUM]</font>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出符合行之外并列出上下各NUM行，默认值是2。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;&nbsp; (列出file中除包含panda样式的行外并列出其上下2行)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (若要改变默认值，直接改变NUM即可)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-C[NUM] </font>panda file</strong> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 5. <font color="#0000ff">-b, --byte-offset</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 列出样式之前的内文总共有多少byte ..<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-b </font>panda file</strong>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示结果类似于:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">&nbsp;&nbsp; 0:panda<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 66:pandahuang<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 123:panda03</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 6. <font color="#0000ff">--binary-files=TYPE</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此参数TYPE预设为binary(二进制)，若以普通方式搜寻，只有2种结果:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.若有符合的地方：显示Binary file 二进制文件名 matches<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.若没有符合的地方：什么都没有显示。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若TYPE为without-match，遇到此参数，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grep会认为此二进制档案没有包含任何搜寻样式，与<font color="#0000ff">-I </font>参数相同。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若TPYE为text, grep会将此二进制文件视为text档案，与<font color="#0000ff">-a </font>参数相同。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>Warning</strong>: --binary-files=text 若输出为终端机，可能会产生一些不必要的输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp; 7. <font color="#0000ff">-c, --count</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示符合样式行，只显示符合的总行数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若再加上<font color="#0000ff">-v,--invert-match</font>，参数显示不符合的总行数。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 8. <font color="#0000ff">-d ACTION, --directories=ACTION</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若输入的档案是一个资料夹，使用ACTION去处理这个资料夹。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 预设ACTION是read(读取)，也就是说此资料夹会被视为一般的档案；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若ACTION是skip(略过)，资料夹会被grep略过：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 若ACTION是recurse(递归)，grep会去读取资料夹下所有的档案，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 此相当于-r 参数。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; 9.&nbsp;&nbsp;<font color="#0000ff">-E, --extended-regexp</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 采用规则表示式去解释样式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 10.&nbsp;&nbsp;<font color="#0000ff">-e PATTERN, --regexp=PATTERN</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 把样式做为一个partern，通常用在避免partern用-开始。&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 11.&nbsp;&nbsp;<font color="#0000ff">-f FILE, --file=FILE</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 事先将要搜寻的样式写入到一个档案，一行一个样式。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 然后采用档案搜寻。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 空的档案表示没有要搜寻的样式，因此也就不会有任何符合。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; ex: (newfile为搜寻样式文件)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font><strong><font color="#ff0000">grep</font> <font color="#0000ff">-f</font> newfile file</strong>&nbsp;&nbsp;&nbsp;&nbsp;<br />
<br />
&nbsp;&nbsp;&nbsp; 12.&nbsp;&nbsp;<font color="#0000ff">-G, --basic-regexp</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将样式视为基本的规则表示式解释。(此为预设)<br />
<br />
&nbsp;&nbsp;&nbsp; 13.&nbsp;&nbsp;<font color="#0000ff">-H, --with-filename</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在每个符合样式行前加上符合的文件名称，若有路径会显示路径。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; ex: (在file与testfile中搜寻panda样式)&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">$</font><strong><font color="#ff0000">grep</font> <font color="#0000ff">-H</font> panda file ./testfile</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<font color="#008000">file:panda<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ./testfile:panda<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 14.&nbsp;&nbsp;<font color="#0000ff">-h, --no-filename</font>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 与-H参数相类似，但在输出时不显示路径。<br />
<br />
&nbsp;&nbsp;&nbsp; 15.&nbsp;&nbsp;<font color="#0000ff">--help</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 产生简短的help讯息。<br />
<br />
&nbsp;&nbsp;&nbsp; 16.&nbsp;&nbsp;<font color="#0000ff">-I</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; grep会强制认为此二进制档案没有包含任何搜寻样式，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 与<font color="#0000ff">--binary-files=without-match</font>参数相同。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-I </font>panda mv</strong><br />
<br />
&nbsp;&nbsp;&nbsp; 17.&nbsp;&nbsp;<font color="#0000ff">-i, --ignore-case</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 忽略大小写，包含要搜寻的样式及被搜寻的档案。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-i</font> panda mv</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 18.&nbsp;&nbsp;<font color="#0000ff">-L, --files-without-match</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示平常一般的输出结果，反而显示出没有符合的文件名称。<br />
<br />
&nbsp;&nbsp;&nbsp; 19.&nbsp;&nbsp;<font color="#0000ff">-l, --files-with-matches</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示平常一般的输出结果，只显示符合的文件名称。<br />
<br />
&nbsp;&nbsp;&nbsp; 20.&nbsp;&nbsp;<font color="#0000ff">--mmap</font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果可能，使用mmap系统呼叫去读取输入，而不是预设的read系统呼叫。 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在某些状况，--mmap 能产生较好的效能。 然而，--mmap <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如果运作中档案缩短，或I/O 错误发生时，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能造成未定义的行为(包含core dump)，。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 21.&nbsp;&nbsp;<font color="#0000ff">-n, --line-number</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在显示行前，标上行号。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ex:&nbsp;&nbsp;<font color="#008000">$</font> <strong><font color="#ff0000">grep</font> <font color="#0000ff">-n </font>panda file</strong>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 显示结果相似于下:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 行号:符合行的内容<br />
<br />
&nbsp;&nbsp;&nbsp; 22.&nbsp;&nbsp;<font color="#0000ff">-q, --quiet, --silent</font> <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示任何的一般输出。请参阅-s或--no-messages<br />
<br />
&nbsp;&nbsp;&nbsp; 23.&nbsp;&nbsp;<font color="#0000ff">-r, --recursive</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 递归地，读取每个资料夹下的所有档案，此相当于 -d recsuse 参数。<br />
<br />
&nbsp;&nbsp;&nbsp; 24.&nbsp;&nbsp;<font color="#0000ff">-s, --no-messages</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不显示关于不存在或无法读取的错误讯息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
小注: 不像GNU grep，传统的grep不符合POSIX.2协议，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 因为缺乏-q参数，且他的-s 参数表现像GNU grep的 -q 参数。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Shell Script倾向将传统的grep移植，避开-q及-s参数，<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 且将输出限制到/dev/null。<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
POSIX: 定义UNIX及UNIX-like系统需要提供的功能。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 25.&nbsp;&nbsp;<font color="#0000ff">-V, --version</font> <br />
&nbsp;&nbsp; 显示出grep的版本号到标准错误。<br />
&nbsp;&nbsp; 当您在回报有关grep的bugs时，grep版本号是必须要包含在内的。<br />
<br />
&nbsp;&nbsp;&nbsp; 26.&nbsp;&nbsp;<font color="#0000ff">-v, --invert-match</font><br />
&nbsp;&nbsp; 显示除搜寻样式行之外的全部。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp; 27.&nbsp;&nbsp;<font color="#0000ff">-w, --word-regexp</font><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 将搜寻样式视为一个字去搜寻，完全符合该"字"的行才会被列出。<br />
<br />
&nbsp;&nbsp;&nbsp; 28.&nbsp;&nbsp;<font color="#0000ff">-x, --line-regexp</font><br />
&nbsp;&nbsp; 将搜寻样式视为一行去搜寻，完全符合该"行"的行才会被列出。</p>
</div>
<p><br />
</p>
 <img src ="http://www.blogjava.net/jzone/aggbug/304072.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jzone/" target="_blank">Gavin.lee</a> 2009-11-29 11:44 <a href="http://www.blogjava.net/jzone/articles/304072.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>