[Shell]grep命令

我是好文章的搬运工,原文来自ChinaUnix,博主scq2099yt,地址:http://blog.chinaunix.net/uid-22312037-id-4217835.html

一、基本用法
        grep是linux中很常用的一个命令,主要功能就是进行字符串数据的对比,能使用正则表达式搜索文本,并将符合用户需求的字符串打印出来。grep全称是Global
Regular Expression
Print,表示全局正则表达式版本,它的使用权限是所有用户。grep在数据中查找出一个字符串时,是以整行为单位来进行数据选取的。
1、命令格式
        grep
[cinvs] ‘patten‘
filename
2、主要参数
        -c:只输出匹配行的计数。
        -i:不区分大小写(只适用于单字符)。
        -n:显示匹配行及行号。
        -s:不显示不存在或无匹配文本的错误信息。
        -v:显示不包含匹配文本的所有行。
3、patten
     
 
要搜索的关键字或正则表达式语句,正则表达式参见后文。
4、简单实例
     
  #netstat -nap|grep 80
     
  上面命令查询监听80端口的行。
       
#grep -n "world" hello.txt
       
查询文件hello.txt中含有"world"字符串的行,并显示行号。
     
  #grep -n "printf" main.c hello.c
world.c
        
在源码文件main.c、hello.c和world.c中查询调用了printf函数的行,并显示行号。
     
  #grep -n "printf" *
       
在当前目录的所有文件中查询调用了printf函数的行,并显示行号。也可以指定路径,比如:/usr/local/include/*。
     
  #grep -r "printf" *
       
在当前目录及所有子目录下递归查找调用了printf函数的行,并显示行号。
     
 
二、正则用法
     
  grep patten正则表达式主要元字符及使用如下表:


















































































元字符

功能

例子

匹配什么

^

锚定行的开始

/^love/

匹配所有以love开头的行

$

锚定行的结束

/love$/

匹配所有以love 结束的行

.

匹配一个字符

/l..e/

匹配这样的行,这些行包含这样的字符:第一个字符是l,紧跟着两个字符,然后是e

*

代表0个或多个先前字符

/*love/

匹配所有这样的行,有0个或多个空格,空格后跟着love

[]

匹配字符组中的一个字符

/[Ll]ove/

匹配所有包含love或者Love的行

[^]

匹配一个不在范围内的字符

/[^A-Z]ove/

 

<

锚定单词的开始

<love

匹配所有这样的行,这些行包含以love开头的单词(vi和grep支持这个功能)

>

锚定单词的结束

Love>

匹配所有这样的行,这些行包含以love结束的单词(vi和grep支持这个功能)

(..)

标记后面用到的匹配字符

/(love)able1rs/

最多可以使用9个标签。第一个标签是模板最左边的部分。在本例子中,模板love保存的标签为1,后面的1指得就是love;本例子搜索的是这样的行,这些行包含这样的字符,在Loveabel后面跟着lovers

x{m}

M次复制字符x

   

x{m,}

至少m次复制字符x

   

x{m,n}

至少m次,至多n次复制字x

   

w

文字和数字字符,[A-Za-z0-9]

Lw*e

匹配一个L字符,紧跟着0个或多个文字或数字字符,然后是e

W

同上

   

b

单词分界线

bloveb

仅仅匹配单词love

简单实例如下:
        #ls -l | grep
‘^a‘
        通过管道过滤ls
-l输出的内容,只显示以a开头的行。
        #grep
‘test‘
d*
        显示所有以d开头的文件中包含test的行。
     
  #grep ‘[a-z]\{5\}‘
aa
        显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
     
  #grep ‘w\(es\)t.*\1‘
aa
        如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(.*),这些字符后面紧跟着另外一个es(\1),找到就显示该行。如果用egrep或grep
-E,就不用"\"号进行转义,直接写成‘w(es)t.*\1‘就可以了。

三、其它家族
     
 
grep家族除了有grep命令外,还包括egrep和fgrep。
     
  egrep是grep的扩展,支持更多的正则元字符,具体如下:










































+

匹配一个或者多个先前字符

[a-z]+ove

匹配一个或者多个小写字符且后面是ove的,

?

匹配0个或者多个先前字符

Lo?ve

匹配L后面有一个或者没有o,然后是ve

a|b|c

匹配a或b或c

Love|hate

匹配love或hate其中一个

()

字符组

Love(able|rs)(ov)+

匹配loveable或lovers,匹配一个或多个ov

(…)(…)12

标记匹配字符串

(love)ing

标签标记出寄存器的一部分,并稍后替换模板。该模板叫做1,并可反复引用。在表达式中最多可以使用9个这样的标签。例如,模板love被保存在寄存器1中并稍后替换标签叫做1

x{m}

重复字符X,m次,至少m,或者m次和n次之间。

   

x{m,}

     

x{m,n}

     

fgrep是fixed grep或fast
grep,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思。

[Shell]grep命令,布布扣,bubuko.com

时间: 2024-08-02 11:02:29

[Shell]grep命令的相关文章

shell --- grep 命令详解

一.grep  ---- "行过滤工具" grep ( global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 )是一种强大的文本搜索工具,它能使用正则表达式搜索文本,查找包含某些字符串的行或符合某个模式(Pattern)的一类字符串的行,并把匹配的行打印出来.   grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则

Shell grep命令详解

grep的全称是global regular expression print,是linux中最强大的文本搜索命令之一,常用于搜索文本文件中是否含有某些特定模式的字符串.该命令以行为单位读取文本并使用正则表达式进行匹配,匹配成功后打印出该行文本. 命令格式grep [option] "string_to_find" filename 常见选项:(1)-i:忽略搜索字符串的大小写 (2)-v:取反,即输出不匹配的那些文本行 (3)-n:输出行号 (4)-l:输出能够匹配模式的文件名,相反

shell grep 命令大全

grep: 用于模糊查找,在标准输入或者文件中 格式: grep [选项参数]...  PATTERN |FILE ... 选项参数说明: -E, --extended-regexp PATTERN 是一个可扩展的正则表达式-e, --regexp=PATTERN 用 PATTERN 来进行匹配操作-f, --file=FILE 从 FILE 中取得 PATTERN-i, --ignore-case 忽略大小写-w, --word-regexp 强制 PATTERN 仅完全匹配字词-x, --l

shell脚本编程中的grep命令

grep命令语法 grep命令使用一个选项.一个要匹配的模式和要搜索的文件,它的语法如下所示: grep  [options]  PATTERN  [FILES] 如果没有提供文件名,则grep命令将搜索标准输入. options 选项 含义 -c   输出匹配行的数目,而不是输出匹配的行 -E   启用扩展表达式 -h   取消每个输出行的普通前缀,即匹配查询模式的文件名 -i   忽略大小写 -l   只列出包含匹配行的文件名,而不输出真正的匹配行 -v   对匹配模式取反,即搜索不匹配行而

linux shell 之grep 命令

grep命令 grep 示例: [OPTIONS] PATTERN [FILE...]     [email protected]:~# grep 'root' /etc/passwd         root:x:0:0:root:/root:/bin/bash     [email protected]:~# grep "$USER" /etc/passwd     root:x:0:0:root:/root:/bin/bash     [email protected]:~# g

shell编程之grep命令的使用

大家在学习正则表达式之前,首先要明确一点,并把它牢牢记在心里,那就是: 在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,不要把二者搞混了.切记!!! 通常有三种文本处理工具/命令:grep.sed.awk,它们三者均可以解释正则.下面我就为大家介绍grep命令的使用方法. 一.使用grep命令搜索文件中的内容 grep和egrep命令能够在一个或多个文件的内容中搜索某一特定的字符模式,也被称为正则表达式(regular expressions).一个模式可以是一个单一的

shell脚本工具之grep命令

grep(缩写来自Globally search a Regular Expression and Print)是Linux系统的一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.egrep和fgrep都是grep的扩展,支持更多的re元字符,fgrep就是fixed grep或fast grep.linux使用GNU版本的grep,它功能更强,可以通过-G.-E.-F命令行选项来使用egrep和fgrep的功能.grep可用于shell脚本,因为grep通过返回一个状态

linux shell基础(四)正则表达式与grep命令(编辑中)

一.正则表达式之前学习find命令时,就已经接触过一些简单的正则,那么我们现在来学习一些复杂的正则.首先,我们还是来复习什么是正则表达式,看这个教程先,一定要多看几遍,至少知道正则大概长什么样子.(转载至https://deerchao.net/tutorials/regex/regex.htm )正则就是有规律的一串字符串,用来描述一个特定的内容,正则适合用来处理字符串,不太适合处理数学逻辑.学好正则对编写shell脚本有很大的好处,所有的shell脚本大部分都涉及到正则表达式.各种编程工具中

Shell编程之---grep命令详解

grep 一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来 grep [option]  [mode]  [file] -c       #只输出匹配行的数量 -i       #搜索时忽略大小写 -h       #查询多文件时不显示文件名 -l       #只列出符合匹配的文件名,而不列出具体的匹配行 -n   #列出所有的匹配行,并显示行号 -s   #不显示不存在或无匹配文本的错误信息 -v   #显示不包含匹配文本的所有行 -w   #匹配整词 -x   #匹