Linux 文本 查找命令小结之grep

来源:互联网 发布:软件自带音效 编辑:程序博客网 时间:2024/06/13 15:38

在Linux中 grep是一种文本搜索工具,可以将匹配的信息打印出来。

grep全称 g(Gloally) search for re(Regular Expression) and  p(Print) the results 。

在这里废话一句,有些英文文章翻译成中文后,会丢失其原有的韵味,建议大家直接看原文,这样比较好理解作者意图。

好,回归主题,下面开始

------------------------我是快乐的分割线--------------------------

1.grep的格式如下: grep [OPTION]...PATTERN [FILE]....

在FILE 中以PATTERN(PATTERN 是一个基础正则表达式) 格式执行 grep 操作,该操作的参数是OPTION

eg:grep -i "hello world" helloworld.c helloworld.h 

在helloworld.c和helloworld.h中执行grep操作(即查找)文本内容“helloworld”,参数 -i 表示不区分大小写。 (看 ,so easy!!!)

2.接下来说说OPTION都有些什么,分别代表什么。

[options]主要参数:
-c:只输出匹配行的计数。
-I:不区分大 小写(只适用于单字符)。
-h:查询多文件时不显示文件名。
-l:查询多文件时只输出包含匹配字符的文件名。
-n:显示匹配行及 行号。
-s:不显示不存在或无匹配文本的错误信息。
-v:显示不包含匹配文本的所有行。

3.再说说pattern的主要参数,都有什么,分别起什么作用。
pattern正则表达式主要参数:
\: 忽略正则表达式中特殊字符的原有含义。
^:匹配正则表达式的开始行。
$: 匹配正则表达式的结束行。
\<:从匹配正则表达 式的行开始。
\>:到匹配正则表达式的行结束。
[ ]:单个字符,如[A]即A符合要求 。
[ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
。:所有的单个字符。
* :有字符,长度可以为0。

在这里废话一句,基本上grep的使用和find在一起通过管道来使用的,基本的模式如下:

find  . -name "*.cpp" |grep "helloworld" 

功能如下:查找当前目录及子目录中以cpp结尾的文件,然后在查找结果中查找包含helloworld内容,将最终结果输出。所以管道的作用就是将前面的结果作为后面的基础来使用。废话到此结束,继续正题。。

通过以上的option和pattern参数的了解,基本上grep 的大概作用就可以确定了,下面有几个实例,可以用来学习学习.

1.grep "hello" A.cpp B.cpp C.h 在 ABC文件中查找hello并显示结果

2.grep "[a-z]\{5\}" A.cpp B.cpp C.cpp 在ABC文件中查找连续5个小写字母的 行,并将结果显示。

3.grep “\<man\>” A.cpp 在A 中查找包含man 的行,注意,仅仅是man ,例如batman manni并不会在结果中呈现。

4.grep “^root” A.cpp 在A中查找所有包含root的行,且结果必须符合root在行首的要求。

(1)多个文件查询
    grep "sort" *.doc       #见文件名的匹配
(2)行匹配:输出匹配行的计数
    grep -c "48" data.doc   #输出文档中含有48字符的行数
(3)显示匹配行和行数
    grep -n "48" data.doc       #显示所有匹配48的行和行号
(4)显示非匹配的行
    grep -vn "48" data.doc      #输出所有不包含48的行
(5)大小写敏感
    grep -i "ab" data.doc       #输出所有含有ab或Ab的字符串的行
4, 正则表达式的应用
(1)正则表达式的应用 (注意:最好把正则表达式用单引号括起来)
    grep '[239].' data.doc      #输出所有含有以2,3或9开头的,并且是两个数字的行
(2)不匹配测试
    grep '^[^48]' data.doc      #不匹配行首是48的行
(3)使用扩展模式匹配
    grep -E '219|216' data.doc
5, 使用类名
可以使用国际模式匹配的类名:
[[:upper:]]   [A-Z]
[[:lower:]]   [a-z]
[[:digit:]]   [0-9]
[[:alnum:]]   [0-9a-zA-Z]
[[:space:]]   空格或tab
[[:alpha:]]   [a-zA-Z]


至于更多的grep用法,还是要在实际中不断总结,最终才能熟练使用,请大家切记。


0 0
原创粉丝点击