当前位置:网站首页>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选项,从而节省不少输入的时间:)
边栏推荐
- Mysql batch insert transaction unique key repeated processing
- Rust from entry to proficient 02-installation
- OpenHarmony环境搭建报错: ImportError: cannot import name ‘VERSION‘ from ‘hb.__main__‘
- RTSP/Onvif协议视频平台EasyNVR服务一键升级功能的使用教程
- 刷屏了!!!
- Add the device library after Vivado installation
- 电脑奔溃的时候,到底发生了什么?
- nodeJs--fs模块
- Matlab基础(1)——基础知识
- 概率论的学习整理--番外2:和二项式,组合相关的杨辉三角
猜你喜欢
ModelCoder状态机:对柴油机工况判断策略进行建模
手慢无!阿里亿级流量高并发系统设计核心原理全彩笔记现实开源
Decoding Redis' most overlooked high CPU and memory usage issues
概率论的学习整理4:全概率公式
什么是驱动程序签名,驱动程序如何获取数字签名?
数据湖(十八):Flink与Iceberg整合SQL API操作
Apifox generates interface documentation tutorial and operation steps
JD.com was brutally killed by middleware on two sides. After 30 days of learning this middleware booklet, it advanced to Ali.
Based on MySQL database, Redis cache, MQ message middleware, ES high availability scheme of search engine parsing
企业如何成功完成云迁移?
随机推荐
Homework 7.29 correlation function directory and file attributes related functions
作业7.29 目录相关函数和文件属性相关函数
概率论得学习整理--番外3:二项式定理和 二项式系数
无人艇轨迹跟踪的预设性能抗扰控制研究
句柄与指针的简单理解
DOM常用方法以及项目
湖仓一体电商项目(二):项目使用技术及版本和基础环境准备
[BJDCTF2020]Cookie is so stable-1|SSTI注入
13-GuliMall Basics Summary
saltstack学习2grains&pillar
ECCV 2022 | 新加坡国立大学提出:全新可恢复型模型遗忘框架LIRF!
CMake库搜索函数居然不搜索LD_LIBRARY_PATH
解码Redis最易被忽视的CPU和内存占用高问题
概率论的学习整理--番外1:可重复且无次序的计数公式C(n+k-1,k) 的例题 : 同时丢3个骰子,会有多少种情况?答案不是216而是56!
来n遍剑指--04. 二维数组中的查找
Mysql索引结构
什么是私有云?您应该知道的 6 个优势
Beijing, Shanghai and Guangzhou offline events丨The most unmissable technology gatherings at the end of the year are all gathered
【Kaggle:UW-Madison GI Tract Image Segmentation】肠胃分割比赛:赛后复盘+数据再理解
AlphaFold预测了几乎所有已知蛋白质!涵盖100万物种2.14亿结构,数据集开放免费用...