首页 《Unix Shell 实例精解》学习笔记之grep篇
文章
取消

《Unix Shell 实例精解》学习笔记之grep篇

1.grep的含义是“全局搜索正则表达式(RE)并打印该行”
2.grep 的选项
选项 功能
-b 在各行之前放置它发现的块号。有时在根据上下文定位磁盘字块时有用
-c 显示匹配行数而不是内容
-h 不显示文件名
-I 在座比较时忽略字母大小写
-n 文件中每行之前给出它的相关行号
-s 无声操作。即除了错误消息外不做任何显示。用于检查退出状态
-v 把搜索翻转为只显示不匹配的行
-w 把表达式当作一个次来搜索,相当于用<和>括起来 3.grep命令的退出状态 如果grep操作成功,则状态是0,如果模式没找到,状态是1,如果文件没找到,状态是2。如果操作被取消,则状态是130。 查看状态的方法: 在csh中用echo $status。 在sh和ksh中用echo $? 。 例如 $ echo $? 0 5 4.带正则表达式的grep举例: 用于这些例子的文本文件叫datafile,位于chap03目录(你也可以放在别的目录下)。datafile内容如下: northwest NW Charles Main 3.0 .98 3 34 western WE Sharon Gray 5.3 .97 5 23 southwest SW Lewis Dalsass 2.7 .8 2 18 southern SO Suan Chin 5.1 .95 4 15 southeast SE Patricia Hemenway 4.0 .7 4 17 eastern EA TB Savage 4.4 .84 5 20 northeast NE AM Main Jr. 5.1 .94 3 13 north NO Margot Weber 4.5 .89 5 9 central CT Ann Stephens 5.7 .94 5 13 1) % grep NW datafile 解释:打印datafile中包含NW的行 2) grep NW d _解释:打印所有以d开头的文件中含有NW的文件。 3) % grep ‘^n’ datafile 解释:打印文件datafile中所有以字母n开头的行 4) % grep TB Savage datafile 解释:在Savage和datafile文件中查找有TB的行 5) % grep ‘TB Savage’ datafile 解释:在datafile文件中查找含有TB Savage的行并打印。 6) % grep ‘^[we]’ datafile 解释:打印datafile中以w或者e开头的行 7) % grep ‘ss_ ‘ datafile northwest NW Charles Main 3.0 .98 3 34 southwest SW Lewis Dalsass 2.7 .8 2 18 解释:打印所有包含一个s并跟0个或者多个s,然后跟一个空格的行 6.用管道的grep. grep 可以从管道得到输入。 % ls –l drwxr-xr-x 6 oracle dba 512 4月 3 21:49 chap10 drwxr-xr-x 2 oracle dba 512 4月 10 22:23 exam -rwxr–r– 1 oracle dba 1842 4月 3 21:51 readme.txt -rwxr–r– 1 oracle dba 1801 4月 3 21:51 unix_readme.txt % ls –l | grep ‘^d’ drwxr-xr-x 6 oracle dba 512 4月 3 21:49 chap10 drwxr-xr-x 2 oracle dba 512 4月 10 22:23 exam % ls -l |grep ‘^[^d]’ -rwxr–r– 1 oracle dba 1842 4月 3 21:51 readme.txt -rwxr–r– 1 oracle dba 1801 4月 3 21:51 unix_readme.txt 7.带选项的grep举例: % grep –c ‘west’ datafile 3 解释:计算datafile中含有west的总数。 8.egrep (扩展的grep) egrep可以使用额外的正则表达式,如下表。 元字符 功能 例子 解释

  • 匹配一个或多个前驱字符 ‘[a-z]+ove’ 匹配一个或多个小写字母,后跟ove
    ? 匹配0个或者1个前驱字符 ‘lo?ve’ 将找到love或love
    a|b 匹配a或者b ‘love|hate’ 与love或hate匹配
    () 组字符 ‘lov(ely|able) 与lovely或lovable匹配
    9.egrep 举例:
    % egrep ‘2.?[0-9]’ datafile
    解释:打印所有这样的行:它包含一个2,后跟0个或者一个句号,然后跟一个数字。
    10. fgrep
    fgrep 把所有的元字符都当作字符本身,只代表自己。
    11. UNIX 工具试验参考答案(内容参考datebook)
    (1) 打印包含San的行
    % grep ‘San’ datebook
    (2) 打印所有以J开头的人名所在的行
    % grep ‘^J’ datebook
    (3) 打印以700结尾的行
    % grep ‘700$’ datebook
    (4) 打印所有不包含834的行
    % grep -v ‘834’ datebook
    (5) 打印出生在12月(December)的行
    % grep ‘/12’ datebook
    (6) 打印工资是6位数的行,并给出行号
    % grep -n ‘[0-9]{6,}$’ datebook
本文由作者按照 CC BY-NC-SA 4.0 进行授权
热门标签

自己使用的VIM配置文件和插件

《Unix Shell 实例精解》学习笔记之sed篇

Comments powered by Disqus.

热门标签