当前位置:网站首页>grep时排除指定的文件和目录
grep时排除指定的文件和目录
2022-07-30 12:20:00 【武念】
参考:
http://winterth.duapp.com/notes/ar03s04.html
http://blog.sina.com.cn/s/blog_7169c8ce0100qkyf.html
–exclude=FILE_PATTERN skip files and directories matching FILE_PATTERN
–exclude-from=FILE skip files matching any file pattern from FILE
–exclude-dir=PATTERN directories that match PATTERN will be skipped.
虽然help中说“–exclude”可以忽略文件和目录,可是实际测试中发现并不能忽略目录。所以,要排除目录,还得用“–exclude-dir”
例如:
grep -rn --exclude-dir=build_* --exclude-dir=kernel --exclude-dir=drivers --exclude=*.out ‘abcdefg’ .
grep --exclude-dir=“.svn” U_BOOT_CMD * -nR --exclude=“cscope.out” --exclude=“tags”
在当前目录下查找所有“abcdefg”的字符串,但不在以“build_”开头的目录、“kernel”和“dirvers”中查找,同时忽略所有以“out”为后缀的文件。
grep简介(熟悉的同学可以直接省略这一部分):
全称是global search regular expression_r(RE) and print out the line,即全文搜索正则表达式,并把匹配的结果打印出来,是linux下非常强大的文本搜索工具。
因为是命令行工具,它可以灵活地指定匹配模式、选项和要匹配的目标文件,如果结合linux下特有的管道命令" | ",其功能要比windows自带的搜索工具和一些windows下文本编辑器强大很多。
由于工作要求在linux环境下进行C++开发,接触linux时间尚浅,没有遇到一款功能较为齐全且较为顺手的IDE,因此查看源代码时很多功能需要手动在bash下完成,比如常常需要查看一个函数在整个源码库中的调用情况:
grep -r ‘function_name’ ***
(*表示当前目录下所有文件,-r表示递归查找,使用的模式较为简单,仅作参考)
由于现在的很多项目都使用subversion作为版本管理工具,因此每个源码目录下都会有一个.svn 目录,其中包含了很多源码信息。不出意外,你很快会得到满屏幕的打印信息,但是其中大部分的信息都来自于 .svn 目录下的文件。
有如下两种选择可以去除来自 .svn 目录的结果信息:
1.使用管道进行双层“过滤”,其中第二次grep使用了-v选项,即逆向匹配**,打印出不匹配的行
grep -r ‘function_name’ * | grep -v ‘.svn’
2.或者更简单一些,直接使用**–exclude-dir选项,即指定排除目录**,注意svn前的 .
**grep -r --exclude-dir=.svn ‘function_name’ ***
的确,通过简单的选项设置,我们达到了过滤.svn目录的功能,但是每次都要输入 –exclude-dir=.svn 的选项,似乎太麻烦了一点,幸运的是linux下灵活的配置文件可以解决这一切:
打开 ~/.bashrc (这是bash的当前用户配置文件),在文件的最上方添加这样一条:
export GREP_OPTIONS=“–exclude-dir=.svn”
(注意 = 的前后不能有空格,不然在载入该配置文件时会提示错误)
export GREP_OPTIONS=“–exclude-dir=.svn --exclude-dir=.git --exclude=tags --exclude=cscope.out”
保存并关闭,同时在命令行键入如下命令:
source ~/.bashrc (让bash重新读取脚本)
当然,你也可以简单地关闭shell并重新打开一个shell窗口
这样当你使用grep时,bash都会自动帮你附加–exclude选项,从而节省不少输入的时间:)
边栏推荐
- [BJDCTF2020]Cookie is so stable-1|SSTI injection
- Matlab绘图(1)——二维绘图
- Breaking the principle and introducing SQL, what does MongoDB want to do???
- saltstack学习3模块
- 【Kaggle比赛常用trick】K折交叉验证、TTA
- JS事件的相关特性以及原理
- 概率论的学习和整理--番外4: 关于各种平均数:算术平均数,几何平均数,调和平均数,以及加权平均数和平方平均数 (未完成)
- int a=8,a=a++,a? int b=8,b=b+1,b?
- C# 时间戳与时间的互相转换
- 湖仓一体电商项目(一):项目背景和架构介绍
猜你喜欢

概率论的学习整理1: 集合和事件

【记一个kaggle划水比赛】PetFinder.my - Pawpularity Contest 宠物预测

What happened when the computer crashed?

监控界的最强王者,没有之一!

Add the device library after Vivado installation

New:WebKitX ActiveX :::Crack

概率论的学习整理2:如何对随机实验的对象:“事件” 进行计数呢? 四种计数方法,不只是排列组合

MySQL查询性能优化

【Kaggle比赛常用trick】K折交叉验证、TTA

OneNote如何修改已有的笔记本为默认的快速笔记?
随机推荐
湖仓一体电商项目(二):项目使用技术及版本和基础环境准备
概率论的学习整理5:贝叶斯(bayes)法则和贝叶斯概率
打破原则引入SQL,MongoDB到底想要干啥???
MySQL中的select,from, join, on where groupby等执行顺序
超图iServer rest服务之最佳路径分析
Beijing, Shanghai and Guangzhou offline events丨The most unmissable technology gatherings at the end of the year are all gathered
【32. 图中的层次(图的广度优先遍历)】
最基础01/完全背包
什么是驱动程序签名,驱动程序如何获取数字签名?
Rust 从入门到精通02-安装
shell的理解
Jackson 的JAR包冲突问题
unity对象池(学习)
saltstack学习2grains&pillar
JD.com was brutally killed by middleware on two sides. After 30 days of learning this middleware booklet, it advanced to Ali.
湖仓一体电商项目(一):项目背景和架构介绍
概率论的学习和整理--番外4: 关于各种平均数:算术平均数,几何平均数,调和平均数,以及加权平均数和平方平均数 (未完成)
概率论的学习整理2:如何对随机实验的对象:“事件” 进行计数呢? 四种计数方法,不只是排列组合
大手笔!两所“双一流”大学,获75亿元重点支持!
[SCTF2019]Flag Shop