grep 简单使用
grep的功能
语法:
范本是一个单独的词或者是一个用引号括起来的字符串。如果范本包含空格,则范本要用引号括起来。grep默认下把结果输出到屏幕但是并不影响或改变任何被查找的目标文件。
一些特殊字符($, *, [, ^, |, (, ), 和/)的使用要特别小心,因为这些字符在shell里有特殊意义。如果这些字符作为范本的一部份,请用单引号把整个范式括起来。
| # grep root /etc/passwd /etc/shadow /etc/passwd:root:x:0:0:Super-User:/:/sbin/sh /etc/shadow:root:PdhpgiTZvqa2:13732:::::: 备注:黑体部分是文件名 |
grep命令的输入
| global$grep mypattern hello grep I forget input file(s) ^D global$ global$ ps -ef | grep root global$ grep root /etc/passwd /etc/shadow |
grep命令的返回值(不是查找结果)
| ### 0 (范本在指定文件里被查找到。) global$grep root /etc/passwd;echo $? root:x:0:0:Super-User:/:/sbin/sh 0 ### 1 (范本在指定文件里没有查找到) ### 2 (指定的目标文件不存在) 备注:Bourn/Korn shell变量,?,返回最后被执行的命令的返回值;C shell变量是status。 |
grep命令的选项
| 选项 | 描述 |
| -c | 显示符合范本的行的数目而不是显示满足条件的行的内容 |
| -h | 不显示文件名 |
| -i | 忽略大小写 |
| -l | 只列出有满足条件的行的文件的文件名 |
| -n | 显示满足条件的行在包含它的文件中的行号 |
| -s | 隐形操作,即如果出错不输出任何信息。在用于只检返回值时非常有用。 |
| -v | 反向显示,即输出不满足条件的行。 |
grep的正则表达式的元字符
| 元字符 | 功能 | 列子 | 描述 |
| ^ | 行首 | '^love' | 匹配所有以love开始的行 |
| $ | 行尾 | 'love$' | 匹配所有以love结尾的行 |
| .(点) | 匹配任意一个字符 | 'l..e' | 匹配所有包含l,紧跟任意2个字符,再跟一个e的行 |
| * | 匹配0个或多个字符 | ' *love' | 匹配所有包含0个或多个空格,再跟love的行 |
| [] | 匹配一个在集合里的字符 | '[Ll]ove' | 匹配包含Love或love的行 |
| [^] | 匹配一个不在集合里的字符 | '[^A-K]ove' | 匹配不包含从A-K的字符,紧跟ove的行 |
| /< | 词首 | '/<love' | 匹配所有有任一单词以love为首的行 |
| /> | 词尾 | 'love/>' | 匹配所有有任一单词以love为尾的行 |
| /(../) | 标识匹配的一个或多个字符 | '/(love/)ing' | 标识一个标注以期后面引用,第一个用/1,一次类推,最多有9个;见列子 |
| x/{m/} x/{m,/} x/{m,n/} |
重复字符x:m次 至少m次 在m次到n次之间 |
'0/{5/}' '0/{5,/}' '0/{5,10/} |
如果一个行有:连续5个0,至少连续5个0,连续的0在5到10之间,则满足要求。 |
例子
- 查找在/etc下以p为首的文件中有那些行包含有root
| # 、/usr/bin/grep root /etc/p* /etc/passwd:root:x:0:0:Super-User:/:/sbin/sh /etc/project:user.root:1:::: |
- 输出所有的非空行
| $ /usr/bin/grep . $HOME.profile
$ /usr/bin/grep ^$ /etc/passwd | wc -l (本命令统计/etc/passwd里有几行空行) |
- 输出/etc/passwd中包含root或者sys的行
| $/usr/xpg4/bin/grep -e 'root' -e 'sys' /etc/passwd 或者 $/usr/xpg4/bin/grep -E 'root|sys' /etc/passwd root:x:0:0:Super-User:/:/sbin/sh sys:x:3:3::/: |
- 输出所有行,此行包含这样的一个单词,它以小写字母打头,紧跟任意个字符,以n结尾
| $ grep '/<[a-z].*n/>' /etc/passwd (注意.*,它表示任意个字符,包括空格) |
- 输出行,它包含一个3,紧跟着一个点和一个数字,再紧跟任意个字符(.*),再跟一个3(前面标识过了),一个或多个TAB,再跟一个3. 因为3前面被标识过,/(3/),所以后面引用只要用/1就可以了。
| $ grep '/(3/)/.[0-9].*/1 */1' /etc/passwd
注:你可以替换3为任意你想要的其他字符 |
- 输出行,这些行有单词至少包含9个连续的小写字母
| $grep '[a-z]/{9,/}' /etc/passwd |
- 输出当前目录下文件名,这些文件包含有这样子的行,这些行包含有'SE'字符串,忽略大小写。
| $ grep -l -i 'se' * |
egrep(扩展的grep)
| 元字符 | 功能 | 例子 | 描述 |
| + | 匹配一个或多个前导字符 | '[a-z]+ove' | 匹配一个或多个小写字符,紧跟ove.如love,loove,alove |
| ? | 匹配0个或一个前导字符 | 'lo?ve' | 匹配以l开始,紧跟零个o或者一个o,在跟ve.如lve,love |
| a|b | 匹配a或者b | 'love|hate' | 匹配love或者hate |
| () | 分组 | 'lov(able|ly)?' | 匹配lovable或者lovly,或者lov |
- 包含S,紧跟h或者u
| $ egrep 'S(h|u)' /etc/passwd |
grep 简单使用的更多相关文章
- grep简单常用的语法介绍
说明: grep -n 关键字 查询的文档 ->-n表示打印行号 grep -c 关键字 查询的文档1 查询的文档2 ->-c表示输出匹配行的数目,而不是输出匹配的行. grep -rn ...
- grep简单用法
grep 常用参数: -c: 打印符合要求的行数 -i :忽略大小写 -n:输出行和行号 -v:打印不符合要求的行,即反选 -A:后跟数字(有无空格都可以),例如-A2 表示打印筛选行及前2行 -B: ...
- grep经常使用使用方法
grep简单介绍 正如linux的man文件里所描写叙述的那样: grep searches the named input FILEs (or standard input if no files ...
- grep命令參数及使用方法
功能说明:查找文件中符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- grep命令参数和使用方法
功能说明:查找符合串的条件的文件. 语言 法国:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- awk.sed.grep三剑客详解
事前准备1.主机node1:172.16.133.112.作为实验的文件/etc/passwd /etc/fstab qinqin cp /etc/passwd . cp /etc/fstab . 一 ...
- linux-shell脚本命令之grep
版权声明: https://blog.csdn.net/zdp072/article/details/26015611 [ grep简单介绍: ] grep是用来过滤含有特定字符的行, 能使用正則表達 ...
- 日志分析查看——grep,sed,sort,awk运用
概述 我们日常应用中都离不开日志.可以说日志是我们在排查问题的一个重要依据.但是日志并不是写了就好了,当你想查看日志的时候,你会发现线上日志堆积的长度已经超越了你一行行浏览的耐性的极限了.于是,很有必 ...
- [Linux] Linux常用文本操作命令整理
简单的总结一下常用的一些实用的Linux文本操作命令,包括wc(统计).cut(切分).sort(排序).uniq(去重).grep(查找).sed(替换.插入.删除).awk(文本分析). 1.统计 ...
随机推荐
- JSP页面显示乱码
下面的显示页面(display.jsp)就出现乱码: <html> <head> <title>JSP的中文处理</title> <meta ht ...
- java简单的数据库查询(SQLServer数据库)
1.数据库链接类 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; pu ...
- mmap直接控制底层【转】
转自:http://blog.csdn.net/xyyangkun/article/details/7830149 版权声明:本文为博主原创文章,未经博主允许不得转载. 这是在mini6410上测试成 ...
- jQuery的Ajax的跨域请求
今天碰到一个Ajax跨域请求的问题,我把源码down下来,然后在服务器端写了一个http请求的代理(因为服务器端是不存在跨域问题的),说白了就是用BufferedReader写了个IO流,然后读取到目 ...
- post 405 method not allowed
HTTP 405 错误 – 方法不被允许 (Method not allowed) 介绍 HTTP 协议定义一些方法,以指明为获取客户端(如您的浏览器或我们的 CheckUpDown 机器人)所指定的 ...
- canvas 动画
1.随机产生形状,做360度运转,带有一个开始开始按钮一个停止按钮 var canvas=$('.mycanvas'); canvas.attr("width",500);//$( ...
- VS 6.00 工程项目文件详解
*.dsp(DeveloperStudio Project):是VC++的工程配置文件,比如说你的工程包含哪个文件,你的编译选项是什么等等,编译的时候是按照.dsp的配置来的.*.dsw(Develo ...
- 银行账户管理系统(oracle数据库连接池,数据库的链接,)
/* * 银行账户管理系统: * 属性:账户id,姓名,金额salary,利息类型: *管理员模块实现的功能: * 1.给用户开户 * 2.查询所有账户信息 * 用户模块实现的功能: * 1.显示用户 ...
- U3D刚体测试3(constraints)
程序这边的接口: mRigidbody.constraints = RigidbodyConstraints.FreezePositionX | RigidbodyConstraints.Freeze ...
- Convert.ChangeType转换泛型的性能损失测试
经常要传入参数包,当时一直是用泛型+ChangeType解决的.测试了下,看来这样确实慢了. 另外,可能都会认为Release发布之后会被优化掉.但测试了Release和Debug结果一样慢,比较失望 ...