shell 三剑客之 grep
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的更多相关文章
- shell三剑客之grep
背景 对于很多的测试人员来说,grep命令都很熟悉,用的最多的比如去查找指定的进程:ps -ef | grep *** ,其中***为进程名或进程号,这里我们只用到的grep的最基础功能-从标准输出中 ...
- Linux进阶之正则,shell三剑客(grep,awk,sed),cut,sort,uniq
一.正则表达式:Regular Expression 正则表达式:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式 ...
- Shell—三剑客(grep、sed、awk)
grep命令详解 文本搜索工具,根据用户指定的“模式(pattern)”对目标文本进行过滤,显示被模式匹配到的行. 命令格式:grep [options] pattern filename.gr ...
- shell 文本处理三剑客之 grep 和 egrep
shell 三剑客之 grep 命令语法格式 grep 参数 案例 显示file中有python的行 grep python file 显示没有python的行,不忽略大小写 grep -v pyth ...
- shell脚本三剑客:grep、sed、awk
shell脚本三剑客:grep sed awk grep语法: grep [OPTIONS] PATTERN [FILE] 常用选项 -c 统计匹配到的 ...
- linux三剑客之grep
linux基础三剑客之grep 1.grep命令 基本介绍 grep命令是文本本过滤工具,是基于一个模式匹配文件的每一行,grep分类:egrep个fgrep. grep英文名:Global sea ...
- Linux文本处理三剑客之grep及正则表达式详解
Linux文本处理三剑客之grep及正则表达式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux文本处理三剑客概述 grep: 全称:"Global se ...
- Linux文本处理三剑客之——grep
一Linux文本处理三剑客之——grep Linux文本处理三剑客都支持正则表达式 grep :文本过滤( 模式:pattern) 工具,包括grep, egrep, fgrep (不支持正则表达式) ...
- (转)不看绝对后悔的Linux三剑客之grep实战精讲
不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...
随机推荐
- PHP count_chars() 函数
实例 返回一个字符串,包含所有在 "Hello World!" 中使用过的不同字符(模式 3): <?php高佣联盟 www.cgewang.com$str = " ...
- @程序员,如何进入BAT这类一线公司?做到这几点的就有机会!
跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师该如何规划准备,才能跳槽进入BAT这类一线互联网公司? 作者简介:中华石杉,十余年BAT架构经验,倾囊相授 我用了三个 “很多” 来形 ...
- C++程序员容易走入性能优化误区!对此你怎么看呢?
有些C++ 程序员,特别是只写C++ 没有写过 Python/PHP 等慢语言的程序员,容易对性能有心智负担,就像着了魔一样,每写3 行代码必有一行代码因为性能考虑而优化使得代码变形(复杂而晦涩). ...
- EACCES: permission denied,mkdir … npm install 安装依赖问题解决
强哥最近在用hugeGraph图库做二次开发的时候,在打包的时遇到前端项目打包失败的问题: cwebp-bin@4.0.0 postinstall /home/hugegraph/my-hugegra ...
- QT学习笔记(day01)
QT中的对象树 一定程度上简化了内存回收机制:当创建的对象 指定的父亲是由QObject或者Object派生的类时候,这个对象被加载到对象树上,当窗口关闭掉时候,树上的对象也都会被释放掉 信号和槽 通 ...
- python 创建字典以及操作字典----这是基础知识
当你编程久了,发现所有的东西都是建立在基础之上的,庞大的代码 你要识别出它的类型是什么 或者返回后类型是什么!? 根据返回的类型 或者需要操作的对象是什么类型 就可以选择相应的方法进行处理 #创建字 ...
- ios迅雷上架成功的秘密 背后的“苹果TF签名”
距离ios迅雷从App Store下架已经过去很久了,小微经常看到知乎里有很多迅雷用户到处寻找可以下载应用的渠道.近期迅雷被爆“好消息”iOS 迅雷(官方版)正式上架 App Store,此消息一出可 ...
- 可能是Asp.net Core On host、 docker、kubernetes(K8s) 配置读取的最佳实践
写在前面 为了不违反广告法,我竭尽全力,不过"最佳实践"确是标题党无疑,如果硬要说的话 只能是个人最佳实践. 问题引出 可能很多新手都会遇到同样的问题:我要我的Asp.net ...
- “随手记”开发记录day11
今天,我们团队针对每个团队对我们项目的意见或建议进行了探讨,决定了接下来需要改进的地方: (1)背景图片和颜色搭配: (2)增加修改功能: (3)对功能进行更明显划分,让使用者能够更方便的使用.
- “随手记”开发记录day08
今天完成了关于统计页面中的关于每月支出和每月收入的页面