??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲色最新高清av网站,国产日产亚洲系列,国产日产亚洲系列最新http://www.tkk7.com/jzone/category/42911.htmljava web, java wap ..My laboratory..zh-cnSat, 05 Dec 2009 00:22:31 GMTSat, 05 Dec 2009 00:22:31 GMT60Linux 输入、输出、重定向、管?/title><link>http://www.tkk7.com/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.tkk7.com/jzone/articles/304714.html</guid><description><![CDATA[<a >http://doc.linuxpk.com/41840.html</a> <br /> <a >http://www.cnblogs.com/hexapodsoft/archive/2007/04/24/724902.html</a> <img src ="http://www.tkk7.com/jzone/aggbug/304714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2009-12-03 23:15 <a href="http://www.tkk7.com/jzone/articles/304714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Linux 常用命oQ文件的复制、删除和UdQ?/title><link>http://www.tkk7.com/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.tkk7.com/jzone/articles/304713.html</guid><description><![CDATA[<p><strong>cp命o</strong> <br /> 该命令的功能是将l出的文件或目录拯到另一文g或目录中Q同MSDOS下的copy命o一P功能十分强大?</p> <p>语法Q?cp [选项] 源文件或目录 目标文g或目?</p> <p>说明Q该命o把指定的源文件复制到目标文g或把多个源文件复制到目标目录中?/p> <p>该命令的各选项含义如下Q?/p> <p>- a 该选项通常在拷贝目录时使用。它保留链接、文件属性,q归地拷贝目录,其作用等于dpR选项的组合?/p> <p>- d 拯时保留链接?/p> <p>- f 删除已经存在的目标文件而不提示?/p> <p>- i 和f选项相反Q在覆盖目标文g之前给出提C求用L认。回{y时目标文件将被覆盖,是交互式拯?</p> <p>- p 此时cp除复制源文g的内容外Q还把其修Ҏ(gu)间和讉K权限也复制到新文件中?</p> <p>- r 若给出的源文件是一目录文gQ此时cp递归复制该目录下所有的子目录和文g。此时目标文件必Mؓ一个目录名?/p> <p>- l 不作拯Q只是链接文件?</p> <p>  需要说明的是,为防止用户在不经意的情况下用cp命o破坏另一个文Ӟ如用h定的目标文g名已存在Q用cp命o拯文g后,q个文g׃被新源文件覆盖,因此Q徏议用户在使用cp命o拯文gӞ最好用i选项?/p> <p><strong>mv命o</strong></p> <p>用户可以使用mv命o来ؓ文g或目录改名或文件由一个目录移入另一个目录中。该命o如同MSDOS下的ren和move的组合?/p> <p>语法Qmv [选项] 源文件或目录 目标文g或目?</p> <p>说明Q视mv命o中第二个参数cd的不同(是目标文件还是目标目录)Qmv命o文仉命名或将其移至一个新的目录中。当W二个参数类型是文gӞmv命o完成文g重命名,此时Q源文g只能有一个(也可以是源目录名Q,它将所l的源文件或目录重命名ؓl定的目标文件名。当W二个参数是已存在的目录名称Ӟ源文件或目录参数可以有多个,mv命o各参数指定的源文g均移至目标目录中。在跨文件系l移动文件时Qmv先拷贝,再将原有文g删除Q而链臌文g的链接也丢失?/p> <p>命o中各选项的含义ؓQ?/p> <p>- I 交互方式操作。如果mv操作导致对已存在的目标文g的覆盖,此时pȝ询问是否重写Q要求用户回{y或nQ这样可以避免误覆盖文g?/p> <p>- f 止交互操作。在mv操作要覆盖某已有的目标文件时不给M指示Q指定此选项后,i选项不再v作用?/p> <p>如果所l目标文Ӟ不是目录Q已存在Q此时该文g的内容将被新文g覆盖。ؓ防止用户用mv命o破坏另一个文Ӟ使用mv命oUd文gӞ最好用i选项?</p> <p><strong>rm命o</strong></p> <p>用户可以用rm命o删除不需要的文g。该命o的功能ؓ删除一个目录中的一个或多个文g或目录,它也可以某个目录及其下的所有文件及子目录均删除。对于链接文Ӟ只是断开了链接,原文件保持不变?/p> <p>rm命o的一般Ş式ؓQ?/p> <p>rm [选项] 文g… </p> <p>如果没有使用- r选项Q则rm不会删除目录?</p> <p>该命令的各选项含义如下Q?/p> <p>- f 忽略不存在的文gQ从不给出提C?</p> <p>- r 指示rm参C列出的全部目录和子目录均递归地删除?/p> <p>- i q行交互式删除?</p> <p>使用rm命o要小心。因Z旦文件被删除Q它是不能被恢复的。了防止q种情况的发生,可以使用i选项来逐个认要删除的文g。如果用戯入yQ文件将被删除。如果输入Q何其他东西,文g则不会删除?/p> <img src ="http://www.tkk7.com/jzone/aggbug/304713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/jzone/" target="_blank">Gavin.lee</a> 2009-12-03 23:10 <a href="http://www.tkk7.com/jzone/articles/304713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Trap命o详解http://www.tkk7.com/jzone/articles/304082.htmlGavin.leeGavin.leeSun, 29 Nov 2009 03:58:00 GMThttp://www.tkk7.com/jzone/articles/304082.html 
原文地址Qhttp://koudai.360.cn/u/18497921/article_125515949.html?s=y
参考地址Qhttp://www.cnblogs.com/guosixu/archive/2008/07/11/1240821.html
 
 一. trap捕捉C号之后,可以有三U反应方式:
  (1)执行一D늨序来处理q一信号
  (2)接受信号的默认操?
  (3)忽视q一信号

  ? trap对上面三U方式提供了三种基本形式Q?
  
Shell代码
  1. W一UŞ式的trap命o在shell接收到signal list清单中数值相同的信号Ӟ执行双引号中的命o丌Ӏ?  
  2.   trap 'commands' signal-list   
  3.   trap "commands" signal-list   
  4.   
  5.   Z恢复信号的默认操作,使用W二UŞ式的trap命oQ?  
  6.   trap signal-list   
  7.   
  8.   W三UŞ式的trap命o允许忽视信号   
  9.   trap " " signal-list  


  注意Q?
  (1) 对信?1(D违?不能捕捉Q因为shell本n需要捕捉该信号去进行内存的转储?
  (2) 在trap中可以定义对信号0的处?实际上没有这个信?Q?shellE序在其l止(如执行exit语句)时发信号?
  (3) 在捕捉到signal-list中指定的信号q执行完相应的命令之后, 如果q些命o没有shellE序l止的话QshellE序l执行收Ch所执行的命令后面的命oQ这样将很容易导致shellE序无法l止?

  另外Q在trap语句中,单引号和双引h不同的,当shellE序W一ơ碰到trap语句Ӟ把commands中的命o扫描一遍。此时若commands是用单引hh的话Q那么shell不会对commands中的变量和命令进行替换, 否则commands中的变量和命令将用当时具体的值来替换?


在有些情况下Q我们不希望自己的shell脚本在运行时刻被中断Q比如说我们写得shell脚本设ؓ某一用户的默认shellQɘq一用户q入pȝ后只能作某一工作,如数据库备䆾Q?我们可不希望用户使用ctrl+C之类便进入到shell状态,做我们不希望做的事情。这便用C信号处理?

kill -l可以列出pȝ的信号名Uͼ如下Q?
Shell代码
  1. -bash-3.00$ kill -l   
  2.  1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL   
  3.  5) SIGTRAP      6) SIGABRT      7) SIGEMT       8) SIGFPE   
  4.  9) SIGKILL     10) SIGBUS      11) SIGSEGV     12) SIGSYS   
  5. 13) SIGPIPE     14) SIGALRM     15) SIGTERM     16) SIGUSR1   
  6. 17) SIGUSR2     18) SIGCHLD     19) SIGPWR      20) SIGWINCH   
  7. 21) SIGURG      22) SIGIO       23) SIGSTOP     24) SIGTSTP   
  8. 25) SIGCONT     26) SIGTTIN     27) SIGTTOU     28) SIGVTALRM   
  9. 29) SIGPROF     30) SIGXCPU     31) SIGXFSZ     32) SIGWAITING   
  10. 33) SIGLWP      34) SIGFREEZE   35) SIGTHAW     36) SIGCANCEL   
  11. 37) SIGLOST     41) SIGRTMIN    42) SIGRTMIN+1  43) SIGRTMIN+2  
  12. 44) SIGRTMIN+3  45) SIGRTMAX-3  46) SIGRTMAX-2  47) SIGRTMAX-1  
  13. 48) SIGRTMAX  



通常我们需要忽略的信号有四个,卻IHUP, INT, QUIT, TSTPQ也是信号1, 2, 3, 24使用q样的语句可以ɘq些中断信号被忽略:
trap "" 1 2 3 24 ?trap "" HUP INT QUIT TSTP
?trap Q? 2 3 24 ?trap HUP INT QUIT TSTP使其回复默认倹{?
用stty -a可以列出中断信号与键盘的对应Q分别执行上面的命o后,q行
tail -f /etc/passwd, 然后试用键盘中断,试试两种情况Q默认和忽略Q下有何不同?
Shell代码
  1. -bash-3.00$ stty -a   
  2. speed 9600 baud;   
  3. rows = 24; columns = 82; ypixels = 0; xpixels = 0;   
  4. csdata ?   
  5. eucw 1:0:0:0, scrw 1:0:0:0  
  6. intr = ^c; quit = ^\; erase = ^?; kill = ^u;   
  7. eof = ^d; eol = <undef>; eol2 = <undef>; swtch = <undef>;   
  8. start = ^q; stop = ^s; susp = ^z; dsusp = ^y;   
  9. rprnt = ^r; flush = ^o; werase = ^w; lnext = ^v;   
  10. -parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk -crtscts -crtsxoff -parext   
  11.   
  12. -ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl -iuclc   
  13. ixon -ixany -ixoff imaxbel   
  14. isig icanon -xcase echo echoe echok -echonl -noflsh   
  15. -tostop echoctl -echoprt echoke -defecho -flusho -pendin iexten   
  16. opost -olcuc onlcr -ocrnl -onocr -onlret -ofill -ofdel tab3  


更方便的是我们可以用在shell中用trap定义我们自己的信号处理程序,p在c中用signal一P

如:trap “echo 'GO Away'” INT
Shell代码
  1. zj@zj:~/Script/test$ cat reboot.sh   
  2. #/bin/bash   
  3. i=0;   
  4. while(( 1 ))   
  5. do   
  6. echo "hello $i"  
  7. sleep 1  
  8. (( i++ ))   
  9. trap "bash $0 && kill $$" QUIT   
  10. done   
  11. echo haha   
  12. zj@zj:~/Script/test$ ./reboot.sh   
  13. hello 0  
  14. hello 1  
  15. hello 2  
  16. hello 3  
  17. Quit   
  18. hello 0  
  19. hello 1  
  20. hello 2  
  21. Quit   
  22. hello 0  
q样^\可以rebootE序了^_^不知道linux重启是不是trap到某个信号了p?..当然是类?q个脚本太east?有时间加Z了看看^_^

附:
Linux信号? 
1) SIGHUP 本信号在用户l端q接(正常或非正常)l束时发? 通常是在l端的控制进E结束时, 通知同一session内的各个作业, q时它们与控制终端不再关?   
2) SIGINT E序l止(interrupt)信号, 在用户键入INTR字符(通常是Ctrl-C)时发?  
3) SIGQUIT 和SIGINTcM, 但由QUIT字符(通常是Ctrl-\)来控? q程在因收到SIGQUIT退出时会生core文g, 在这个意义上cM于一个程序错误信?   
4) SIGILL 执行了非法指? 通常是因为可执行文g本n出现错误, 或者试图执行数据段. 堆栈溢出时也有可能生这个信?   
5) SIGTRAP 由断Ҏ(gu)令或其它trap指o产生. 由debugger使用.   
6) SIGABRT E序自己发现错误q调用abort时?   
7) SIGIOT 在PDP-11上由iot指o产生, 在其它机器上和SIGABRT一?   
8) SIGBUS 非法地址, 包括内存地址寚w(alignment)出错. eg: 讉K一个四个字长的整数, 但其地址不是4的倍数.   
9) SIGFPE 在发生致命的术q算错误时发? 不仅包括点q算错误, q包括溢出及除数?{其它所有的术的错?   
10) SIGKILL 用来立即l束E序的运? 本信号不能被d, 处理和忽?   
11) SIGUSR1 留给用户使用   
12) SIGSEGV 试图讉K未分配给自己的内? 或试囑־没有写权限的内存地址写数?   
13) SIGUSR2 留给用户使用   
14) SIGPIPE Broken pipe   
15) SIGALRM 旉定时信号, 计算的是实际的时间或旉旉. alarm函数使用该信? 
16) SIGTERM E序l束(terminate)信号, 与SIGKILL不同的是该信号可以被d和处? 通常用来要求E序自己正常退? shell命okill~省产生q个信号.   
17) SIGCHLD 子进E结束时, 父进E会收到q个信号.   
18) SIGCONT 让一个停?stopped)的进El执? 本信号不能被d. 可以用一个handler来让E序在由stopped状态变为l执行时完成特定的工? 例如, 重新昄提示W?  
19) SIGSTOP 停止(stopped)q程的执? 注意它和terminate以及interrupt的区? 该进E还未结? 只是暂停执行. 本信号不能被d, 处理或忽?   
20) SIGTSTP 停止q程的运? 但该信号可以被处理和忽略. 用户键入SUSP字符?通常是Ctrl-Z)发出q个信号   
21) SIGTTIN 当后C业要从用L端读数据? 该作业中的所有进E会收到SIGTTIN信号. ~省时这些进E会停止执行.   
22) SIGTTOU cM于SIGTTIN, 但在写终?或修改终端模?时收?   
23) SIGURG 有紧急数据或out-of-band数据到达socket时?   
24) SIGXCPU 过CPU旉资源限制. q个限制可以由getrlimit/setrlimit来读?改变   
25) SIGXFSZ 过文g大小资源限制.   
26) SIGVTALRM 虚拟旉信号. cM于SIGALRM, 但是计算的是该进E占用的CPU旉.
27) SIGPROF cM于SIGALRM/SIGVTALRM, 但包括该q程用的CPU旉以及pȝ调用的时?   
28) SIGWINCH H口大小改变时发?   
29) SIGIO 文g描述W准备就l? 可以开始进行输?输出操作.   
30) SIGPWR Power failure


Gavin.lee 2009-11-29 11:58 发表评论
]]>
ulimit命o详解http://www.tkk7.com/jzone/articles/304081.htmlGavin.leeGavin.leeSun, 29 Nov 2009 03:57:00 GMThttp://www.tkk7.com/jzone/articles/304081.html 
原文地址Qhttp://www.diybl.com/course/6_system/linux/linuxjq/20081117/151630.html

1,说明:
ulimit用于shell启动q程所占用的资?
2,cd:
shell内徏命o
3,语法格式:
ulimit [-acdfHlmnpsStvw] [size]
4,参数介绍:
-H 讄g资源限制.
-S 讄软g资源限制.
-a 昄当前所有的资源限制.
-c size:讄core文g的最大?单位:blocks
-d size:讄数据D늚最大?单位:kbytes
-f size:讄创徏文g的最大?单位:blocks
-l size:讄在内存中锁定q程的最大?单位:kbytes
-m size:讄可以使用的常d存的最大?单位:kbytes
-n size:讄内核可以同时打开的文件描q符的最大?单位:n
-p size:讄道~冲区的最大?单位:kbytes
-s size:讄堆栈的最大?单位:kbytes
-t size:讄CPU使用旉的最大上?单位:seconds
-v size:讄虚拟内存的最大?单位:kbytes 5,单实?
5.举例
在Linux下写E序的时候,如果E序比较大,l常会遇?#8220;D错?#8221;Qsegmentation faultQ这L问题Q这主要是׃Linuxpȝ初始的堆栈大(stack sizeQ太的~故Q一般ؓ10M。我一般把stack size讄?56MQ这样就没有D错误了Q命令ؓQ?
ulimit   -s 262140
如果要系l自动记住这个配|,q?etc/profile文gQ在 “ulimit -S -c 0 > /dev/null 2>&1”行下Q添?#8220;ulimit   -s 262140”Q保存重启系l就可以了!
1]在RH8的环境文?etc/profile?我们可以看到pȝ是如何配|ulimit?
#grep ulimit /etc/profile
ulimit -S -c 0 > /dev/null 2>&1
q条语句讄了对软g资源和对core文g大小的设|?
2]如果我们惌对由shell创徏的文件大作些限??
#ll h
-rw-r--r-- 1 lee lee 150062 7?22 02:39 h
#ulimit -f 100 #讄创徏文g的最大块(一?512字节)
#cat h>newh
File size limit exceeded
#ll newh
-rw-r--r-- 1 lee lee 51200 11?8 11:47 newh
文gh的大是150062字节,而我们设定的创徏文g的大是512字节x100?51200字节
当然pȝ׃Ҏ(gu)你的讄生成?1200字节的newh文g.
3]可以像实?]一?把你要设|的ulimit攑֜/etc/profileq个环境文g?
用?
讄或报告用戯源极限?
语法
ulimit [ -H ] [ -S ] [ -a ] [ -c ] [ -d ] [ -f ] [ -m ] [ -n ] [ -s ] [ -t ] [ Limit ]
描述
ulimit 命o讄或报告用戯E资源极限,?/etc/security/limits 文g所定义。文件包含以下缺省值极限:
fsize = 2097151
core = 2097151
cpu = -1
data = 262144
rss = 65536
stack = 65536
nofiles = 2000
当新用户d到系l中Ӟq些D作ؓ~省g用。当向系l中d用户Ӟ以上值通过 mkuser 命o讄Q或通过 chuser 命o更改?
极限分ؓ软性或性。通过 ulimit 命oQ用户可Y极限更改到硬极限的最大设|倹{要更改资源极限,必须拥有 root 用户权限?
很多pȝ不包括以上一U或数种极限?特定资源的极限在指定 Limit 参数时设定。Limit 参数的值可以是每个资源中指定单元中的数字,或者ؓ?unlimited。要特定的 ulimit 讄?unlimitedQ可使用?unlimited?
    注:?/etc/security/limits 文g中设|缺省极限就是设|了pȝ宽度极限Q?而不仅仅是创建用h用户所需的极限?
省略 Limit 参数Ӟ会打印出当前资源极限。除非用h?-H 标志Q否则打印出软极限。当用户指定一个以上资源时Q极限名U和单元在g前打印。如果未l予选项Q则假定带有?-f 标志?
׃ ulimit 命o影响当前 shell 环境Q所以它?yu)作?shell 常规内置命o提供。如果在独立的命令执行环境中调用该命令,则不影响调用者环境的文g大小极限。以下示例中正是q种情况Q?
nohup ulimit -f 10000
env ulimit 10000
一旦通过q程减少了硬极限Q若?root Ҏ(gu)则无法增加,即ɘq回到原g不可能?
关于用户和系l资源极限的更多信息Q请参见 AIX 5L Version 5.3 Technical Reference: Base Operating System and Extensions Volume 1 中的 getrlimit、setrlimit ?vlimit 子例E?
标志
-a     列出所有当前资源极限?
-c     ?512 字节块ؓ单位Q指定核心{储的大小?
-d     ?K 字节为单位指定数据区域的大小?
-f     使用 Limit 参数时设定文件大极限(以块计)Q或者在未指定参数时报告文g大小极限。缺省gؓ -f 标志?
-H     指定讄某个l定资源的硬极限。如果用h?root 用户权限Q可以增大硬极限。Q何用户均可减硬极限?
-m     ?K 字节为单位指定物理存储器的大?
-n     指定一个进E可以拥有的文g描述W的数量的极限?
-s     ?K 字节为单位指定堆栈的大小?
-S     指定为给定的资源讄软极限。Y极限可增大到极限的倹{如?-H ?-S 标志均未指定Q极限适用于以上二者?
-t     指定每个q程所使用的秒数?
退出状?
q回以下退出|
0     成功完成?
>0     拒绝Ҏ(gu)高的极限的请求,或发生错误?
CZ
要将文g大小极限讄?51,200 字节Q输入:
ulimit -f 100
文章出处Qhttp://www.diybl.com/course/6_system/linux/linuxjq/20081117/151630.html


Gavin.lee 2009-11-29 11:57 发表评论
]]>
sed用法介绍http://www.tkk7.com/jzone/articles/304077.htmlGavin.leeGavin.leeSun, 29 Nov 2009 03:54:00 GMThttp://www.tkk7.com/jzone/articles/304077.html 
输出W?行到W??
Shell代码
  1. -bash-3.00$ sed -n '1,3p' sed.txt   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. wangmin803   pts/16       Jul 29 14:18  (219.149.138.142)   
  4. majorchan   pts/21       Jul 29 15:18   (202.203.137.236)  


输出W??
Shell代码
  1. -bash-3.00$ sed -n '2p' sed.txt   
  2. wangmin803   pts/16       Jul 29 14:18  (219.149.138.142)  


查找含有tomotoboy的行让后输出
Shell代码
  1. -bash-3.00$ sed -n '/tomotoboy/'p sed.txt   
  2. tomotoboy   pts/45       Jul 29 13:53   (219.221.99.155)   
  3. tomotoboy   pts/46       Jul 29 15:24   (219.221.99.155)   
  4. tomotoboy   pts/52       Jul 29 16:20   (219.221.99.155)  


输出当前的所有用?
Shell代码
  1. /home/l/g/tomotoboy >who   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)   
  4. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  5. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  6. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


输出W一行到含有字符串tomotoboy的行
Shell代码
  1. /home/l/g/tomotoboy >who | sed -n '1,/tomotoboy/'p   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)  


输出原文的同Ӟ输出tomotoboy所在的行号
Shell代码
  1. -/home/l/g/tomotoboy >who|sed '/tomotoboy/'=   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. 2  
  4. tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)   
  5. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  6. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  7. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


输出含有tomotoboy的行的行?
Shell代码
  1. /home/l/g/tomotoboy >who | sed -e '/tomotoboy/'=   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. 2  
  4. tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)   
  5. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  6. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  7. kindy      pts/38       Aug  7 21:33    (reverse.gdsz.cncnet.net)   
  8. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


输出W一行到最后一?
Shell代码
  1. /home/l/g/tomotoboy >who | sed -n '1,$p'  
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)   
  4. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  5. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  6. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


输出最后一?
Shell代码
  1. /home/l/g/tomotoboy >who|sed -n '$p'  
  2. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


append.sedQsed脚本实现附加功能Q将hello tomotoboy附g在tomotoboy所在行之后
Shell代码
  1. /home/l/g/tomotoboy >cat append.sed   
  2. #!/bin/sed -f   
  3. /tomotoboy/ a\   
  4. hello tomotoboy   
  5.   
  6. /home/l/g/tomotoboy >who| append.sed   
  7. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  8. tomotoboy   pts/16       Aug  7 21:24   (219.221.98.71)   
  9. hello tomotoboy   
  10. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  11. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  12. kindy      pts/38       Aug  7 21:41    (reverse.gdsz.cncnet.net)   
  13. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


文本输出Ӟ把tomotoboy替换成hello
Shell代码
  1. /home/l/g/tomotoboy >who|sed 's/tomotoboy/hello/'  
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. hello   pts/16       Aug  7 21:24       (219.221.98.71)   
  4. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  5. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  6. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


只输替换的行
Shell代码
  1. /home/l/g/tomotoboy >who|sed -n 's/tomotoboy/hello/p'  
  2. hello   pts/16       Aug  7 21:24       (219.221.98.71)  


如果要附加或修改一个字W串Q可以用(&Q命令,&命o保存发现模式以便重新调用它,然后把它攑֜替换字符串里面?
Shell代码
  1. /home/l/g/tomotoboy >who|sed -n 's/tomotoboy/hello &/p'  
  2. hello tomotoboy   pts/16       Aug  7 21:24     (219.221.98.71)   
  3. /home/l/g/tomotoboy >who|sed -n 's/tomotoboy/& my friend/p'  
  4. tomotoboy my friend   pts/16       Aug  7 21:24 (219.221.98.71)  


Shell代码
  1. 删除最后一?  
  2. bash-3.00$ sed '$d' sed.txt    
  3. 删除W一到最?/span>6?  
  4. -bash-3.00$ sed '1,6d' sed.txt    
  5. 删除W一到最后一?  
  6. -bash-3.00$ sed '1,$d' sed.txt    
  7. 删除tomotoboy的行   
  8. -bash-3.00$ sed '/tomotoboy/d' sed.txt    
  9. 用seawolf替代tomotoboy   
  10. -bash-3.00$ sed 's/tomotoboy/seawolf/' sed.txt    
  11. 用seawolf替代tomotoboy然后输出到sed.out   
  12. -bash-3.00$ sed 's/tomotoboy/seawolf/w sed.out' sed.txt  


看看我们写好了哪些sed脚本
Shell代码
  1. /home/l/g/tomotoboy >ls -al|grep 'sed$'  
  2. -rwxr--r--   1 tomotoboy member        45 Aug  7 21:41 append.sed   
  3. -rwxr--r--   1 tomotoboy member        68 Jul 30 16:28 change.sed  

看看change.sed的用途是什么?
Shell代码
  1. /home/l/g/tomotoboy >cat change.sed   
  2. #!/bin/sed -f   
  3. #change.sed   
  4. /tomotoboy/ c\   
  5. I love China,Ilove Wanzhi.  

扑ֈtomotoboyQ替换ؓI love China,Ilove Wanzhi.
Shell代码
  1. /home/l/g/tomotoboy >who|change.sed   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. I love China,Ilove Wanzhi.   
  4. guise      pts/21       Aug  7 17:56    (124.76.10.207)   
  5. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  6. uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  7. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


Gavin.lee 2009-11-29 11:54 发表评论
]]>
awk使用http://www.tkk7.com/jzone/articles/304075.htmlGavin.leeGavin.leeSun, 29 Nov 2009 03:53:00 GMThttp://www.tkk7.com/jzone/articles/304075.html 

调用awk有三U方式调用awkQ第一U是命o行方式,如:
Shell代码
  1. awk [-F field-separator] 'commands' input-file(s)  

q里Qcommands是真正的awk命o。上面例子中Q?F域分隔符]是可选的Q因为a w k使用I格作ؓ~省的域分隔W,因此如果要浏览域间有I格的文本,不必指定q个选项Q但如果要浏览诸?passwd文gQ此文g各域以冒号作为分隔符Q则必须指明- F选项Q?
Shell代码
  1. awk -F: 'commands' input-file  
W二U方法是所有a w k命o插入一个文Ӟq a w kE序可执行,然后用a w k命o解释器作本的首行Q以侉K过键入脚本名称来调用它?
W三U方式是所有的awk命o插入一个单独文Ӟ然后调用Q?
Shell代码
  1. awk -f awk_script_ file input_file(s)  
- f选项指明在文件awk_script_ file中的a w k脚本Qinput_file(s)是用awkq行览的文件名?

模式和动?/strong>
Mawk语句都由模式和动作组成。在一个awk脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事g。处理即Ҏ(gu)据进行的操作。如果省略模式部分,动作时M持执行状态。模式可以是M条g语句或复合语句或正则表达式。模式包括两个特D字DBEGIN和END。用BEGIN语句讄计数和打印头。BEGIN语句使用在Q何文本浏览动作之前,之后文本览动作依据输入文g开始执行?END语句用来在awk完成文本览动作后打印输出文本L和结态标志。如果不特别指明模式Q?awkL匚w或打印行数。实际动作在大括号{ }内指明。动作大多数用来打印Q但是还有些更长的代码诸?if和@环(loopingQ语句及循环退出结构。如果不指明采取动作Q?awk打印出所有浏览出来的记录?

域和记录
awk执行Ӟ其浏览域标记?1Q?2 . . . $n。这U方法称为域标识。用这些域标识更Ҏ(gu)对域q行q一步处理。?1,$3表示参照W?和第3域,注意q里用逗号做域分隔。如果希望打C个有5个域的记录的所有域Q不必指?$1,$2,$3,$4 ,$5Q可使用$0Q意x有域。awk览Ӟ到达一新行Q即假定到达包含域的记录末尾Q然后执行新记录下一行的d作,q新设|域分隔。注意执行时不要hW号$和shell提示W?Q它们是不同的?

打印所有域的信?/strong>
Shell代码
  1. /home/l/g/tomotoboy >who   
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)   
  4. liuqingaihn   pts/21       Aug  7 23:10 (116.29.229.116)   
  5. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  6. uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  7. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)   
  8. /home/l/g/tomotoboy >who | awk '{print $0}'  
  9. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  10. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)   
  11. liuqingaihn   pts/21       Aug  7 23:10 (116.29.229.116)   
  12. guise      pts/35       Aug  7 21:13    (58.41.162.27)   
  13. uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  14. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


抽取W一域,q打印出来:
Shell代码
  1. /home/l/g/tomotoboy >who|awk '{print $1}'  
  2. liuzk423   
  3. tomotoboy   
  4. liuqingaihn   
  5. guise   
  6. uyty   
  7. yagamil  


打印W一域、第三域
Shell代码
  1. /home/l/g/tomotoboy >who | awk '{print $1"\t"$3}'  
  2. liuzk423        Jul   
  3. tomotoboy       Aug   
  4. liuqingaihn     Aug   
  5. guise           Aug   
  6. uyty            Aug   
  7. yagamil         Aug  


打印信息头和信息?/strong>
Shell代码
  1. /home/l/g/tomotoboy >who | awk  'BEGIN {print "--------BEGIN-------\n"} {print $1"\t"$3} END {print "----------END-------"}'  
  2. --------BEGIN-------   
  3.   
  4. liuzk423        Jul   
  5. tomotoboy       Aug   
  6. liuqingaihn     Aug   
  7. guise   Aug   
  8. uyty    Aug   
  9. kenhq   Aug   
  10. yagamil Aug   
  11. ----------END-------  


如果W一个域{于tomotoboy
Shell代码
  1. /home/l/g/tomotoboy >who | awk  '{if ($1~/tomotoboy/) print $0}'  
  2. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)  


如果行的域中包含tomotoboy打印它
Shell代码
  1. /home/l/g/tomotoboy >who | awk  '$0 ~/tomotoboy/'  
  2. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)  


不匹?/strong>
Shell代码
  1. /home/l/g/tomotoboy >who | awk  '{if ($1!~/tomotoboy/) print $0}'  
  2. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  3. uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  4. kenhq      pts/40       Aug  7 23:46    (116.77.50.7)   
  5. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)   
  6.   
  7. /home/l/g/tomotoboy >who | awk  '$0  !~/tomotoboy/'  
  8. liuzk423   pts/6        Jul 20 08:27    (219.245.104.240)   
  9. liuqingaihn   pts/21       Aug  7 23:54 (116.29.229.116)   
  10. uyty       pts/38       Aug  7 22:09    (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  11. kenhq      pts/40       Aug  7 23:46    (116.77.50.7)   
  12. yagamil    pts/46       Aug  7 20:48    (199.40.206.191)  


行首
打印行首包含to的行
Shell代码
  1. /home/l/g/tomotoboy >who | awk  '/^to/'  
  2. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)  

AND
打印W一域ؓtomotoboyQ第三域为Aug的行
Shell代码
  1. /home/l/g/tomotoboy >who | awk  '{if ($1=/tomotoboy/ && $2=/Aug/) print $0}'  
  2. awk: syntax error near line 1  
  3. awk: illegal statement near line 1  
  4. /home/l/g/tomotoboy >who | awk  '{if ($1~/tomotoboy/ && $3~/Aug/) print $0}'  
  5. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)  

注意区分“=”?#8220;==”Q获得两U截然不同的l果
Shell代码
  1. /home/l/g/tomotoboy >who | awk  '{if ($1="tomotoboy" && $3="Aug") print $0}'  
  2. tomotoboy pts/6 Aug 20 08:27 (219.245.104.240)   
  3. tomotoboy pts/16 Aug 7 23:33 (219.221.98.71)   
  4. tomotoboy pts/21 Aug 8 00:05 (116.29.229.116)   
  5. tomotoboy pts/35 Aug 8 00:05 (116.29.229.116)   
  6. tomotoboy pts/38 Aug 7 22:09 (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  7. tomotoboy pts/40 Aug 7 23:46 (116.77.50.7)   
  8. tomotoboy pts/46 Aug 7 20:48 (199.40.206.191)  


Shell代码
  1. /home/l/g/tomotoboy >who | awk  '{if ($1=="tomotoboy" && $3=="Aug") print $0}'  
  2. tomotoboy   pts/16       Aug  7 23:33   (219.221.98.71)  


awk内置变量
Shell代码
  1. /home/l/g/tomotoboy >who|awk '{print NF,NR,$0}'  
  2. 6 1 liuzk423   pts/6        Jul 20 08:27        (219.245.104.240)   
  3. 6 2 tomotoboy   pts/16       Aug  7 23:33       (219.221.98.71)   
  4. 6 3 liuqingaihn   pts/21       Aug  8 00:05     (116.29.229.116)   
  5. 6 4 liuqingaihn   pts/35       Aug  8 00:05     (116.29.229.116)   
  6. 6 5 uyty       pts/38       Aug  7 22:09        (p3213-ipbf803souka.saitama.ocn.ne.jp)   
  7. 6 6 kenhq      pts/40       Aug  7 23:46        (116.77.50.7)   
  8. 6 7 yagamil    pts/46       Aug  7 20:48        (199.40.206.191)  


awk内置字符串函?/span>
awk内置字符串函敎ͼawk又很多字W处理函敎ͼq里以lengthZ
Shell代码
  1. /home/l/g/tomotoboy >who| awk '{print length($1)" "$1}'  
  2. 8 liuzk423   
  3. 9 tomotoboy   
  4. 11 liuqingaihn   
  5. 11 liuqingaihn   
  6. 5 kenhq   
  7. 7 yagamil  

如果W一域的长度大于7p?
Shell代码
  1. /home/l/g/tomotoboy >who| awk '{if(length($1)>7) print length($1)" "$1}'  
  2. 8 liuzk423   
  3. 9 tomotoboy   
  4. 11 liuqingaihn   
  5. 11 liuqingaihn  


字符串屏蔽序?/span>
使用字符串或正则表达式时Q有旉要在输出中加入一新行或查询一元字W。打C新行ӞQ新行ؓ字符\nQ?Q给出其屏蔽序列Q以不失其特D含义,用法为在字符串前加入反斜Uѝ例如用\n打印一新行。如果用正则表辑ּQ查询花括号Q{ }Q?Q在字符前加反斜U,? \ { /Q将在awk中失掉其Ҏ(gu)含义?
Shell代码
  1. \b 退格键      \t tab?  
  2. \f 走纸换页    \ddd 八进制?  
  3. \n 新行        \c L其他Ҏ(gu)字符Q例如\\为反斜线W号   
  4. \r 回R?  
  5. /home/l/g/tomotoboy >who |awk '{print $1"\t""\t"$2"\n"}'  
  6. liuzk423                pts/6  
  7.   
  8. tomotoboy               pts/16  
  9.   
  10. liuqingaihn             pts/21  
  11.   
  12. liuqingaihn             pts/35  
  13.   
  14. kenhq                   pts/40  
  15.   
  16. yagamil                 pts/46  


printf
printf修饰W,prinf基本域C语言的printf相同下面开始D?
Shell代码
  1. /home/l/g/tomotoboy >echo "65" |awk '{printf "%c\n",$0}'  
  2. A   
  3. /home/l/g/tomotoboy >echo "65" |awk '{printf "%d\n",$0}'  
  4. 65  
  5. /home/l/g/tomotoboy >echo "65" |awk '{printf "%c\t\t%d\n",$0,$0}'  
  6. A               65  


awk数组
Java代码
  1. /home/l/g/tomotoboy >awk 'BEGIN {print split("123#456#789",myarray,"#")}'  
  2. 3  

在上面的例子中,splitq回数组myarray下标数。实际上myarray数组为:
myarray[1]=123
myarray[2]=456
myarray[3]=789
数组使用前,不必定义Q也不必指定数组元素个数。经怋用@环来讉K数组。下面是一U@环类型的基本l构Q?
For (element in array) print array[element]
对于记录“123#456#789” Q先使用split函数划分它,再用@环打印各数组元素。操作脚本如下:
Shell代码
  1. #!/bin/awk -f   
  2. #name: arraytest.awk   
  3. #pprint out am array   
  4. BEGIN{   
  5. record="123#456#789";   
  6. split(record,myarray,"#")}   
  7. END { for (i in myarray) {print myarray[i]}}  

要运行脚本,使用/dev/null作ؓ输入文g?
Shell代码
  1. /home/l/g/tomotoboy >arraytest.awk /dev/null   
  2. 456  
  3. 789  
  4. 123  

awk语言学v来可能有些复杂,但用它来编写一行命令或脚本ƈ不太难。awk是shell~程的一个重要工兗在shell命o或编E中Q虽然可以用awk强大的文本处理能力,但是q不要求你成斚w的专?


Gavin.lee 2009-11-29 11:53 发表评论
]]>
grep用法详解http://www.tkk7.com/jzone/articles/304072.htmlGavin.leeGavin.leeSun, 29 Nov 2009 03:44:00 GMThttp://www.tkk7.com/jzone/articles/304072.htmlgrep 指o

grep -- print lines matching a pattern (符合样式的该行列出)

◎语? grep [options]  PATTERN [FILE...]
grep (globalsearch regular expression(RE) and print out theline,全面搜烦正则表达式ƈ把行打印出来)是一U强大的文本搜烦工具Q它能用正则表辑ּ搜烦文本Qƈ把匹配的行打印出来。Unix的grep家族包括grep?egrep和fgrep。egrep和fgrep的命令只跟grep有很不同。egrep是grep的扩展,支持更多的re元字W,fgrep是 fixed grep或fastgrepQ它们把所有的字母都看作单词,也就是说Q正则表辑ּ中的元字W表C回其自w的字面意义Q不再特D。linux使用GNU版本的grep。它功能更强Q可以通过-G?E?F命o行选项来用egrep和fgrep的功能?br />   grep的工作方式是q样的,它在一个或多个文g中搜索字W串模板。如果模板包括空|则必被引用Q模板后的所有字W串被看作文件名。搜索的l果被送到屏幕Q不影响原文件内宏V?br />   grep可用?a class="infotextkey" target="_blank">shell脚本Q因为grep通过q回一个状态值来说明搜烦的状态,如果模板搜烦成功Q则q回0Q如果搜索不成功Q则q回1Q如果搜索的文g不存在,则返?。我们利用这些返回值就可进行一些自动化的文本处理工作?br />   2. grep正则表达式元字符?基本?
  ^
  锚定行的开?如:'^grep'匚w所有以grep开头的行?br />   $
  锚定行的l束 如:'grep$'匚w所有以grepl尾的行?br />   匚w一个非换行W的字符 如:'gr.p'匚wgr后接一个Q意字W,然后是p?br />   *
  匚w零个或多个先前字W?如:'*grep'匚w所有一个或多个I格后紧跟grep的行?.*一L代表L字符?br />   []
  匚w一个指定范围内的字W,?[Gg]rep'匚wGrep和grep?br />   [^]
  匚w一个不在指定范围内的字W,如:'[^A-FH-Z]rep'匚w不包含A-R和T-Z的一个字母开_紧跟rep的行?br />   (..)
  标记匚w字符Q如'(love)'Qlove被标Cؓ1?br />   <
  锚定单词的开始,?'\>
  锚定单词的结束,?grep>'匚w包含以grepl尾的单词的行?br />   x{m}
  重复字符xQmơ,如:'0{5}'匚w包含5个o的行?br />   x{m,}
  重复字符x,臛_mơ,如:'o{5,}'匚w臛_?个o的行?br />   x{m,n}
  重复字符xQ至mơ,不多于nơ,如:'o{5,10}'匚w5--10个o的行?br />   w
  匚w文字和数字字W,也就是[A-Za-z0-9]Q如Q?Gw*p'匚w以G后跟零个或多个文字或数字字符Q然后是p?br />   W
  w的反|Ş式,匚w一个或多个非单词字W,如点号句L?br />   b
  单词锁定W,? 'bgrepb'只匹配grep?br />   3. 用于egrep?grep -E的元字符扩展?br />   +
  匚w一个或多个先前的字W。如Q?[a-z]+able'Q匹配一个或多个写字母后跟able的串Q如loveable,enable,disable{?br />   ?
  匚w零个或多个先前的字符。如Q?gr?p'匚wgr后跟一个或没有字符Q然后是p的行?br />   a|b|c
  匚wa或b或c。如Qgrep|sed匚wgrep或sed
  ()
  分组W号Q如Qlove(able|rs)ov+匚wloveable或loversQ匹配一个或多个ov?br />   x{m},x{m,},x{m,n}
  作用同x{m},x{m,},x{m,n}
  4. POSIX字符c?br />   Z在不同国家的字符~码中保持一臻IPOSIX(The Portable Operating SystemInterface)增加了特D的字符c,如[:alnum:]是A-Za-z0-9的另一个写法。要把它们放到[]号内才能成ؓ正则表达式,如[A-Za-z0-9]或[[: alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字W类?br />   [:alnum:]
  文字数字字符
  [:alpha:]
  文字字符
  [:digit:]
  数字字符
  [:graph:]
  非空字符(非空根{控制字W?
  [:lower:]
  写字符
  [:cntrl:]
  控制字符
  [:print:]
  非空字符(包括I格)
  [:punct:]
  标点W号
  [:space:]
  所有空白字W?新行Q空|制表W?
  [:upper:]
  大写字符
  [:xdigit:]
  十六q制数字(0-9Qa-fQA-F)
  5. Grep命o选项
  -?
  同时昄匚w行上下的Q行Q如Qgrep -2 pattern filename同时昄匚w行的上下2行?br />   -bQ?-byte-offset
  打印匚w行前面打印该行所在的块号码?br />   -c,--count
  只打印匹配的行数Q不昄匚w的内宏V?br />   -f FileQ?-file=File
  从文件中提取模板。空文g中包?个模板,所以什么都不匹配?br />   -hQ?-no-filename
  当搜索多个文件时Q不昄匚w文g名前~?br />   -iQ?-ignore-case
  忽略大小写差别?br />   -qQ?-quiet
  取消昄Q只q回退出状态?则表C找C匚w的行?br />   -lQ?-files-with-matches
  打印匚w模板的文件清单?br />   -LQ?-files-without-match
  打印不匹配模板的文g清单?br />   -nQ?-line-number
  在匹配的行前面打印行受?br />   -sQ?-silent
  不显C关于不存在或者无法读取文件的错误信息?br />   -vQ?-revert-match
  反检索,只显CZ匚w的行?br />   -wQ?-word-regexp
  如果?lt;?gt;引用Q就把表辑ּ做ؓ一个单词搜索?br />   -VQ?-version
  昄软g版本信息?br />   6. 实例
  要用好grepq个工具Q其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列几个例子Q讲解一个正则表辑ּ的写法?br />   $ ls -l | grep '^a'
  通过道qols -l输出的内容,只显CZa开头的行?br />   $ grep 'test' d*
  昄所有以d开头的文g中包含test的行?br />   $ grep 'test' aa bb cc
  昄在aaQbbQcc文g中匹配test的行?br />   $ grep '[a-z]{5}' aa
  昄所有包含每个字W串臛_?个连l小写字W的字符串的行?br />   $ grep 'w(es)t.*1' aa
  如果west被匹配,则esp存储到内存中Qƈ标记?Q然后搜索Q意个字符(.*)Q这些字W后面紧跟着另外一个es(1)Q找到就昄该行。如果用egrep或grep -EQ就不用""可行{义,直接写成'w(es)t.*1'可以了?


默认情况下,‘grep’只搜索当前目录。如果此目录下有许多子目录,‘grep’会以如下形式列出Q?br /> grep: sound: Is a directory
q可能会?#8216;grep’的输出难于阅诅R这里有两种解决的办法:
明确要求搜烦子目录:grep -r
或忽略子目录Qgrep -d skip
当然Q如果预料到有许多输出,(zhn)可以通过 道 其转到‘less’上阅读:
$ grep magic /usr/src/linux/Documentation/* | less
q样Q?zhn)可以更方便地阅诅R?

有一点要注意Q?zhn)必需提供一个文件过滤方式(搜烦全部文g的话?*Q。如果?zhn)忘了Q?#8216;grep’会一直等着Q直到该E序被中断。如果?zhn)遇到了这L情况Q按 <CTRL c> Q然后再试?nbsp;

配合道Q|Q进行搜索:
grep -C number pattern files Q匹配的上下文分别显C[number]行,
grep pattern1 | pattern2 files Q显C匹?pattern1 ?pattern2 的行Q?
grep pattern1 files | grep pattern2 Q显C既匚w pattern1 又匹?pattern2 的行?

用于搜烦的特D符P
\< ?\> 分别标注单词的开始与l尾?
例如Q?
grep man * 会匹?‘Batman’?#8216;manic’?#8216;man’{,
grep '\<man' * 匚w‘manic’?#8216;man’Q但不是‘Batman’Q?
grep '\<man\>' 只匹?#8216;man’Q而不?#8216;Batman’?#8216;manic’{其他的字符丌Ӏ?
'^'Q指匚w的字W串在行首,
'$'Q指匚w的字W串在行,

===========================================================================================
如果(zhn)不习惯命o行参敎ͼ可以试试囑Ş界面?#8216;grep’Q如 reXgrep 。这个Y件提?AND、OR、NOT {语法,q有漂亮的按?:-) 。如果?zhn)只是需要更清楚的输出,不妨试试 fungrep
egrep
egrep代表expression或extended grepQ适情况而定。egrep接受所有的正则表达式,egrep的一个显著特性是可以以一个文件作Z存的字符Ԍ然后之传给egrep作ؓ参数Qؓ此? f开兟?
===========================================================================================

grep命o是linux下的行过滤工P其参数繁?/strong>

◎参?br />      1. -A NUMQ?-after-context=NUM
                除了列出W合行之外,q且列出后NUM行?br />              
          ex:   $ grep -A 1 panda file
                (从file中搜Lpanda样式的行Qƈ昄该行的后1?
                                 
     2. -a?font color="#0000ff">--text  
                grep原本是搜L字文Ӟ若拿二进制的案作ؓ搜寻的目标,
                则会昄如下的讯? Binary file 二进制文件名 matches 然后l束?br />                   
                若加?font color="#0000ff">-a参数则可二q制案视ؓ文本文g搜寻Q?br />                 相当?font color="#0000ff">--binary-files=textq个参数?br />             
          ex:    (从二q制案mv中去搜寻panda样式)
                (错误!!!)
               $ grep panda mv
               Binary file mv matches  
                (q表C此案有match之处Q详?-binary-files=TYPE )
               $
                (正确!!!)
               $ grep -a panda mv
       
     3. -B NUMQ?-before-context=NUM
                ?-A NUM 相对Q但q此参数是显C除W合行之?br />                 q显C在它之前的NUM行?nbsp;       
             
          ex:    (从file中搜Lpanda样式的行Qƈ昄该行的前1?
               $ grep -B 1 panda file

     4. -C [NUM], -NUM, --context[=NUM]  
                列出W合行之外ƈ列出上下各NUM行,默认值是2?br />              
          ex:    (列出file中除包含panda样式的行外ƈ列出其上??
                (若要改变默认|直接改变NUM卛_)
               $ grep -C[NUM] panda file
             
     5. -b, --byte-offset
                列出样式之前的内文d有多byte ..
              
           ex:  $ grep -b panda file  
        昄l果cM?
          0:panda
         66:pandahuang
        123:panda03

           
     6. --binary-files=TYPE
                此参数TYPE预设为binary(二进?Q若以普通方式搜寻,只有2U结?
                  1.若有W合的地方:昄Binary file 二进制文件名 matches
                  2.若没有符合的地方Q什么都没有昄?br />                    
                若TYPE为without-matchQ遇到此参数Q?br />                 grep会认为此二进制档案没有包含Q何搜L式,?font color="#0000ff">-I 参数相同?br />                    
                若TPYE为text, grep会将此二q制文g视ؓtext案Q与-a 参数相同?br />         
     Warning: --binary-files=text 若输Zؓl端机,可能会生一些不必要的输出?br />               
     7. -c, --count
        不显C符合样式行Q只昄W合的总行数?br />         若再加上-v,--invert-matchQ参数显CZW合的总行数?br />
     8. -d ACTION, --directories=ACTION
                若输入的案是一个资料夹Q用ACTIONd理这个资料夹?br />         预设ACTION是read(d)Q也是说此资料夹会被视Z般的案Q?br />         若ACTION是skip(略过)Q资料夹会被grep略过Q?br />         若ACTION是recurse(递归)Qgrep会去d资料夹下所有的档案Q?br />         此相当于-r 参数?br />
     9.  -E, --extended-regexp
        采用规则表示式去解释样式?br />       
    10.  -e PATTERN, --regexp=PATTERN
        把样式做Z个parternQ通常用在避免partern?开始?nbsp; 

    11.  -f FILE, --file=FILE
        事先要搜寻的样式写入到一个案,一行一个样式?br />         然后采用案搜寻?br />         I的案表示没有要搜ȝ样式Q因此也׃会有MW合?br />        
    ex: (newfile为搜L式文?
       $grep -f newfile file    

    12.  -G, --basic-regexp
        样式视为基本的规则表示式解释?此ؓ预设)

    13.  -H, --with-filename
        在每个符合样式行前加上符合的文g名称Q若有\径会昄路径?br />        
    ex: (在file与testfile中搜寻panda样式)   
       $grep -H panda file ./testfile
                file:panda
                 ./testfile:panda
                 $

     
    14.  -h, --no-filename  
                ?H参数相类|但在输出时不昄路径?br />
    15.  --help
                产生短的help讯息?br />
    16.  -I
                grep会强制认为此二进制档案没有包含Q何搜L式,
                ?font color="#0000ff">--binary-files=without-match参数相同?br />                    
            ex:  $ grep -I panda mv

    17.  -i, --ignore-case      
                忽略大小写,包含要搜ȝ样式及被搜寻的案?br />                
            ex:  $ grep -i panda mv
                
    18.  -L, --files-without-match
                不显C^怸般的输出l果Q反而显C出没有W合的文件名U?br />
    19.  -l, --files-with-matches               
                不显C^怸般的输出l果Q只昄W合的文件名U?br />
    20.  --mmap               
                如果可能Q用mmappȝ呼叫去读取输入,而不是预讄readpȝ呼叫?
                在某些状况,--mmap 能生较好的效能?然而,--mmap
                如果q作中案羃短,或I/O 错误发生Ӟ
                可能造成未定义的行ؓ(包含core dump)Q?br />                
    21.  -n, --line-number
                在显C前,标上行号?br />                
             ex:  $ grep -n panda file  
                 昄l果怼于下:
                 行号:W合行的内容

    22.  -q, --quiet, --silent
                不显CZQ何的一般输出。请参阅-s?-no-messages

    23.  -r, --recursive
        递归圎ͼd每个资料夹下的所有案,此相当于 -d recsuse 参数?br />
    24.  -s, --no-messages
        不显C关于不存在或无法读取的错误讯息?br />      
注: 不像GNU grepQ传l的grep不符合POSIX.2协议Q?br />         因ؓ~Z-q参数Q且他的-s 参数表现像GNU grep?-q 参数?br />         Shell Script們֐传l的grepULQ避开-q?s参数Q?br />         且将输出限制?dev/null?br />     
POSIX: 定义UNIX及UNIX-likepȝ需要提供的功能?nbsp;            
    
    25.  -V, --version
   昄出grep的版本号到标准错误?br />    当?zhn)在回报有关grep的bugsӞgrep版本h必须要包含在内的?br />
    26.  -v, --invert-match
   昄除搜L式行之外的全部?br />                    
    27.  -w, --word-regexp
           搜L式视Z个字L寻,完全W合??的行才会被列出?br />
    28.  -x, --line-regexp
   搜L式视Z行去搜寻Q完全符合该"?的行才会被列出?/p>




Gavin.lee 2009-11-29 11:44 发表评论
]]>
վ֩ģ壺 yyƵ| þþþþҹƷƷ| С˵ۺͼ| ҹAëƬƵ | ŮƵ| һػػƵĴƬ| Ʒ޶| 99ƷƷ| һëƬȫѲ| þþƷav18| ҹƵ| վ߹ۿ| 91µַ| ƷƵѹۿ| ձѹۿվ| ޾ƷҹĻ | һѸƵ| ӰƬһѹۿ| վƵ| aëƬav| ޳һ| ߹ۿAVպAV| Ļ޳AƬ| ɫwwwƵ| 50Ů˵ëƬѹۿ| ССӰձۿ| պvĻ| ޼VëƬþþƷ| һëƬ߹ۿ| һëƬѲԿ60| ձh߾Ʒѹۿ| ɫվav| 2019Ļ| 椸Ƶ| Ļ| ŷഺɫУ԰վ| һëƬƵ| ĻȫƵ| ۺһʵ| ŷպƷһ| ŷa߹ۿ|