随笔 - 56, 文章 - 0, 评论 - 0, 引用 - 0
数据加载中……

《LInux与Unix Shell编程指南》笔记之grep家族

                                          grep家族
                                       点击打开本章pdf文档
   grep允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式到所有行。grep支持基本正则表达式,也支持扩展集。
    先建立一个文本文件data.f供下面到测试用,其中用<Tab>来隔开,内容为:

    48 Dec 3BC1997 LPSX 68.00 LVX2A 138
    
483 Sept 5AP1996 USP 65.00 LVX2C 189
    
47 Oct 3ZL1998 LPSX 43.00 KVM9D 512
    
219 dev 2CC1999 CAD 23.00 PLV2C 68
    
484 ncv 7PL1996 CAD 49.00 PLV2C 234
    
483 may 5PA1998 USP 37.00 KVM9D 644
    
216 sept 3ZL1998 USP 86.00 KVM9E 234

    grep一般格式:
    grep[选项]基本正则表达式[文件]
    在调用变量或字符串时用双引号;在调用模式匹配时,用单引号,如:
    查询字符串时使用双引号:

    root@ubuntu:~/test# grep "48" data.f
    
48 Dec 3BC1997 LPSX 68.00 LVX2A 138
    
483 Sept 5AP1996 USP 65.00 LVX2C 189
    
484 ncv 7PL1996 CAD 49.00 PLV2C 234
    
483 may 5PA1998 USP 37.00 KVM9D 644

    上面到在data.f中查找含有"48"到行。
    使用正则表达式来查找,使用单引号:

    root@ubuntu:~/test# grep '48[34]' data.f
    
483 Sept 5AP1996 USP 65.00 LVX2C 189
    
484 ncv 7PL1996 CAD 49.00 PLV2C 234
    
483 may 5PA1998 USP 37.00 KVM9D 644

    上面查找含有"483"和"484"的行。

    root@ubuntu:~/test# grep '^[^48]' data.f
    
219 dev 2CC1999 CAD 23.00 PLV2C 68
    
216 sept 3ZL1998 USP 86.00 KVM9E 234

    上面的查找行首不是48到行。
    其他的可以参照正则表达式来修改查找的内容。

    但我使用双引号试试也可以,暂时不知道为什么,待考究:

    root@ubuntu:~/test# grep "48[34]" data.f
    
483 SEPT 5AP1996 USP 65.00 LVX2C 189
    
484 ncv 7PL1996 CAD 49.00 PLV2C 234
    
483 may 5PA1998 USP 37.00 KVM9D 644
    root@ubuntu:
~/test# grep "^[^48]" data.f
    
219 dev 2CC1999 CAD 23.00 PLV2C 68
    
216 sept 3ZL1998 USP 86.00 KVM9E 234 
   下面时grep到常用选项:
    -c 只输出匹配行到计数
    -i 不区分大小写
    -h 查询多文件时不显示文件名
    -l 查询多文件时只输出包含匹配字符到文件名
    -n 显示匹配行及行号
    -s 不显示不存在或无匹配文本到错误信息
    -v 显示不包含匹配文本到所有行
 
    pdf文档中含有易懂的例子。

posted on 2011-02-20 15:46 八路 阅读(313) 评论(0)  编辑 收藏 引用 所属分类: 嵌入式linux笔记


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理