《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*被作用文件来处理)
解释:打印所有以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
解释:XXX(这里是指含有匹配内容的行数)
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

补充:
grep语法:grep/{n,m/}用来匹配重复次数n到m次。而/{n,}至少n次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值