设为首页 收藏本站
查看: 1105|回复: 0

Shell之grep命令

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-5-4 14:22:26 | 显示全部楼层 |阅读模式
一、基本用法
        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,它把所有的字母都看作单词,即正则元字符不再特殊,而仅仅表示其自身的字母意思。



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-18617-1-1.html 上篇帖子: linux 通过shell上传zip包到指定ftp 下篇帖子: linux系统学习之鸟哥私房菜——shell编程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表