[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:显示不包含匹配文本的所有行。
--o: 只显示正则匹配的文本
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命令的更多相关文章
- SHELL —— grep命令+正则表达式
一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法.或者说:正则就是用来描述一类事物的规则. 生活中处处都是正则: 比如我们描述:4条腿 你可能会想 ...
- linux shell编程学习笔记(二) --- grep命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- Linux Shell脚本入门--grep命令详解
grep简介<摘自鸟哥,并加以整理.> grep (global search regular expression(RE) and print out the line,全面搜索正则表达 ...
- shell脚本--内容查找之grep命令
grep命令可以检索文件中包含关键字(可以使用正则)的行,默认区分大小写. ubuntu@ubuntu:~/test$ cat test.txt this is linux this is Linux ...
- Shell常用命令find、grep总结
一.find 命令 find 命令的常用形式可以简化为 find [path...][expression] path:find 命令查找的目录路径,其中 ./ 表示当前目录,/ 表示系统根目录 ex ...
- Linux Shell基础 管道符和grep命令
概述 管道符:管道符使用"丨"代表.如"命令1丨命令2".表示命令 1 的正确输出作为命令 2 的操作对象.命令 1 必须有正确输出,而命令 2 必须可以处理命 ...
- shell编程之grep命令的使用
大家在学习正则表达式之前,首先要明确一点,并把它牢牢记在心里,那就是: 在linux中,通配符是由shell解释的,而正则表达式则是由命令解释的,不要把二者搞混了.切记!!! 通常有三种文本处理工具/ ...
- Linux Shell 脚本学习第一天: 使用grep 命令,lsusb, ps -ef, 实现树莓派(Debian OS)时检测到依赖的USB设备启动后,启动终端自动执行shell脚本
1.应用背景: 无人监测的设备,常需要设置应用程序开机启动,程序启动前需要保证调用的设备先启动,运行环境先启动. 2.test.sh部分源码 #!/bin/sh #查看桌面是否启动 while tru ...
- Shell基本语法---处理海量数据的grep命令
grep命令 shell脚本三剑客之一 grep应用场景:通常对数据进行 行的提取 语法:grep [选项] [内容] [file] -v 对内容进行取反提取 -n 对提取的内容显示行号 -w 精确匹 ...
随机推荐
- java拷贝构造函数
浅拷贝就是指两个对象共同拥有同一个值,一个对象改变了该值,也会影响到另一个对象. 深拷贝就是两个对象的值相等,但是互相独立. 构造函数的参数是该类的一个实例. Operator = 拷贝构造函数 ...
- PHP session回收机制(转)
由于PHP的工作机制,它并没有一个daemon线程,来定时地扫描session信息并判断其是否失效.当一个有效请求发生时,PHP会根据全局变量 session.gc_probability/sessi ...
- deeplearning.net 0.1 document - Multilayer Perceptron
Multilayer Perceptron 以下我们使用Theano来介绍一下单隐藏层的多层感知机(MLP).MLP能够看成一个logistic回归分类器,它使用一个已经学习的非线性转换器处理输入.这 ...
- 《textanalytics》课程简单总结(2):topic mining
coursera上的公开课<https://www.coursera.org/course/textanalytics>系列,讲的很不错哦. 1."term as topic&q ...
- 研发团队如何借助Gitlab来做代码review
代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现有工具在团队内部形成代码revie ...
- 基于友善之臂ARM-tiny4412--uboot源代码分析
/* * armboot - Startup Code for OMAP3530/ARM Cortex CPU-core * * Copyright (c) 2004 Texas Instrument ...
- JavaWeb学习总结第一篇--初识JavaWeb
JavaWeb学习总结(一)-- 初识JavaWeb 一:Web相关概念 Web程序也就是一般所说的网站,由服务器.客户端浏览器和网络组成.Web程序的好处就是使用简单,不需要安装.学习,有一台电脑. ...
- SWT经常使用组件
1button组件(Button) (1)Button组件经常使用样式 SWT.PUSHbutton SWT.CHECK多选button SWT.RADIO单选button SWT.ARROW箭头bu ...
- 一个中断服务子程序ISR
请看下面的程序(一个中断服务子程序ISR),请指出这段代码的错误.)[中国台湾某著名CPU生产公司2005年面试题] 答案:(1)ISR不能返回一个值.如果你不懂这个,那么是不会被雇用的.(2)ISR ...
- 【BZOJ4942】[Noi2017]整数 线段树+DFS(卡过)
[BZOJ4942][Noi2017]整数 题目描述去uoj 题解:如果只有加法,那么直接暴力即可...(因为1的数量最多nlogn个) 先考虑加法,比较显然的做法就是将A二进制分解成log位,然后依 ...