grep 的全称是 Globally search a Regular Expression and Print,是一种强大的文本搜索工具,它能使用特定模式匹配(包括正则表达式)搜索文本,并默认输出匹配行

我们程序员最常用的是查找指定的线程:

去查找指定的进程:ps -ef | grep ***

grep提供两种方式:

grep [option] [pattern] testfile
stdout | grep [option] [pattern]
语法格式 解释
option 参数选项
pattern 为查找的字符串或者正则表达式

第一种是从文本中直接使用pattern匹配搜索

第二种是从标准输出中处理 grep所提供的option(参数选项)

参数选项 含义
-i 搜索时略大小写
-n 显示行号
-o 只显示被匹配的关键字,不会打印匹配的整行内容
-r 递归搜索
-v 不显示匹配行信息
-q 静默模式,不输出任何信息,在 shel 脚本中,可以通过 echo$?查看是否匹配到,0 表示匹配到,1 表示没有匹配到
-E 使用扩展正则表达式

接下来测试一下:

# 创建一个文件,内容如下:
[root@master tmp_test]# cat test.txt
test
math test
sunday
sunny
java
python
shell
ruby Test # 查找 test
[root@master tmp_test]# grep "test" test.txt
test
math test
发现 grep 区分大小写,Test 就没有查出来。 # 不区分大小写
[root@master tmp_test]# grep -i "test" test.txt
test
math test
ruby Test # 把行号打印出来
[root@master tmp_test]# grep -i -n "test" test.txt
1:test
2:math test
8:ruby Test # 只想查看关键字,行内其他内容忽略
[root@master tmp_test]# grep -i -n -o "test" test.txt
1:test
2:test
8:Test # 查看当前文件夹下多个文件里面字符匹配
# 拷贝一份并充命名
[root@master tmp_test]# cp test.txt test1.txt
# 退回到上一级目录
[root@master tmp_test]# cd ..
# 搜索当前文件夹内的文字匹配
[root@master home]# grep -r -i -n "test" tmp_test/
tmp_test/test1.txt:1:test
tmp_test/test1.txt:2:math test
tmp_test/test1.txt:8:ruby Test
tmp_test/test.txt:1:test
tmp_test/test.txt:2:math test
tmp_test/test.txt:8:ruby Test # -q 表是静默静默模式,在此模式下grep命令不会有任何的打印结果,无论是否有匹配到。 #通过我们会把结果输出到一个文件中
[root@master home]# grep -r -i -n "test" tmp_test/ >> tmp_test/result # 实际编写脚本时,需要判断是否有输出数据,用 $? 来判断
[root@master tmp_test]# grep -i -n -q "test" test.txt
[root@master tmp_test]# echo $?
0
[root@master tmp_test]# grep -i -n -q "teeeest" test.txt
[root@master tmp_test]# echo $?
1 0 表是有输出数据,1表示没有输出数据。

grep 结合正则表达式:

上面说了,grep 的全称是 Globally search a Regular Expression and Print。

grep 之所以强大,就是因为可是使用正则。

基本正则表达式

语法 含义
. 单个字符
* 表示前面的字符连续出现任意次,包括0次
^ 表示锚定行首
$ 表示锚定行尾
[a-z] [0-9] 区间范围

扩展正则,匹配是需要加 -E

语法 含义
表示匹配其前面的字符0或1次
+ 表示匹配其前面的字符至少1次,或者连续多次,连续次数上不封顶。
() 分组
{} 连续匹配
| 匹配多个表达式的任何一个
#查询 以“test”开头的
[root@master tmp_test]# grep "^test" test.txt
test #查询 以“test”结尾的
[root@master tmp_test]# grep "test$" test.txt
test
math test # 查询含有两个连续n,并且以y结尾的
[root@master tmp_test]# grep -E "*n{2}y$" test.txt
sunny

grep 配合正则还可以做很多事情,有实际需要时记得及时查资料。

shell 三剑客之 grep的更多相关文章

  1. shell三剑客之grep

    背景 对于很多的测试人员来说,grep命令都很熟悉,用的最多的比如去查找指定的进程:ps -ef | grep *** ,其中***为进程名或进程号,这里我们只用到的grep的最基础功能-从标准输出中 ...

  2. Linux进阶之正则,shell三剑客(grep,awk,sed),cut,sort,uniq

    一.正则表达式:Regular Expression 正则表达式:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式 ...

  3. Shell—三剑客(grep、sed、awk)

    grep命令详解 文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行. 命令格式:grep  [options]  pattern  filename.gr ...

  4. shell 文本处理三剑客之 grep 和 egrep

    shell 三剑客之 grep 命令语法格式 grep 参数 案例 显示file中有python的行 grep python file 显示没有python的行,不忽略大小写 grep -v pyth ...

  5. shell脚本三剑客:grep、sed、awk

    shell脚本三剑客:grep  sed  awk grep语法: grep [OPTIONS] PATTERN [FILE] 常用选项 -c                       统计匹配到的 ...

  6. linux三剑客之grep

    linux基础三剑客之grep 1.grep命令 基本介绍 grep命令是文本本过滤工具,是基于一个模式匹配文件的每一行,grep分类:egrep个fgrep. grep英文名:Global  sea ...

  7. Linux文本处理三剑客之grep及正则表达式详解

    Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...

  8. Linux文本处理三剑客之——grep

    一Linux文本处理三剑客之——grep Linux文本处理三剑客都支持正则表达式 grep :文本过滤( 模式:pattern) 工具,包括grep, egrep, fgrep (不支持正则表达式) ...

  9. (转)不看绝对后悔的Linux三剑客之grep实战精讲

    不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...

随机推荐

  1. pdb 进行调试

    import pdb a = 'aaa' pdb.set_trace( ) b = 'bbb' c = 'ccc' final = a+b+c print(final) import pdb a = ...

  2. timeit_list操作测试

    ''' timeit库Timer函数 ''' from timeit import Timer def test1(): l = list(range(1000)) def test2(): l = ...

  3. C++ 第三天 Vector、函数

    1.Vector vector是一个动态增长的数组,它会随着我们添加的内容,会逐步的增加空间.实际上它并不是在原来的地方追加空间,而是开辟新的空间,然后把原来的数据都拷贝到新的空间里面去,接着让容器指 ...

  4. Python os.isatty() 方法

    概述 os.isatty() 方法用于判断如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False.高佣联盟 www.cgewang.com 语法 isatty ...

  5. 5.10 省选模拟赛 tree 树形dp 逆元

    LINK:tree 整场比赛看起来最不可做 确是最简单的题目. 感觉很难写 不过单独考虑某个点 容易想到树形dp的状态. 设f[x]表示以x为根的子树内有黑边的方案数. 白边方案只有一种所以不用记录. ...

  6. mongoDB数据库原生配置

    最近小冷在工作中使用到了mongoDB数据库,所以就简单的写了个demo,和大家简单分享下,如果大家也有想分享的东西或者需要分享的东西,生活或者其他都行,可以关注小冷公众号秦川以北或者加小冷微信qxy ...

  7. 代码规范、API设计等规范

    一份整理好了的规范文档,node后端开发用到 "规范是个好东西..." - 鲁迅 以下规范仅作为参考 1.代码规范 命名 尽量保证命名更加语义化 文件命名采用下划线命名法 // g ...

  8. 【NOI2016】区间 题解(线段树+尺取法)

    题目链接 题目大意:给定$n$个区间$[l_i,r_i]$,选出$m$个区间使它们有一个共同的位置$x$,且使它们产生的费用最小.求最小费用.费用定义为最长的区间长度减去最短区间长度. ------- ...

  9. 虚拟机安装Centos(VirtulBox)

    阿里云服务器本月底到期了,之前自己犹豫不觉没上279元3年服务器的车,但是又要用linux,所以有了这篇文章. VirtulBox 一款开源的虚拟化主机应用,可以实现一台电脑上运行多个操作系统(Lin ...

  10. 【av68676164(p51-p53)】虚拟内存管理(2)

    虚拟内存管理(2) 7.3.4 缺页终端 分级存储体系 cache+内存+辅存 页表扩充-带中断位的页表 页号 页框号 中断位I 辅存地址 访问位 修改位 1 1 0 0 0 1 中断位I-标志该页是 ...