linux查询行数次数,linux环境下查找包含指定内容的文件及其所在行数

linux环境下查找包含指定内容的文件及其所在行数

更新时间:2019-03-20 15:50:14点击次数:1807次

前言

在linux系统下搜索文件一般情况下一个命令就搞定了,之前搜索文件的时候一直使用find,今天排查问题时想查一个函数的调用者在哪个文件中,发现不会写了,搜了一下发现使用grep命令就可以实现,改变了我对grep命令的理解,原来使用grep命令的情况通常是作为结果的过滤函数,比如ps aux | grep gameserver,这次发现他居然还可以直接用来搜索,其实也是过滤的一种。

使用方法

这里直接给出命令的写法,简单替换搜索内容就可以使用,也方便自己后续查找使用(例如查找包含stream的文件):

grep -rn 'stream' . --include='*.cpp'

命令解析

上述命令是一种比较常用的写法,就是在当前目录下(一定要注意那个.)查找包含stream的文件,并显示其所在的行,搜索的文件类型是.cpp,其实--include=后面的内容是遵循glob语法的,详细的就不展开了,简单来说就是支持通配符,而查找选项-rn中的r表示递归查找,其中的n表示显示行号,此外还可以使用选项-i表示忽略大小写,下面简单展示一下3个选项的功能:

-r:只递归查找不显示行号

[albert@localhost#18:17:41#/home/albert/test]$grep -r 'stream' . --include='*.cpp'

./testPtr.cpp:#include

./crab-server/code/main/crab.cpp:#include

./testConstructor.cpp:#include

./smartptr/auto_ptr.cpp:#include

./io.cpp:#include

./io.cpp:    ofstream logfile("./logs/players_distribution.txt", ios::out);

./ptr.cpp:#include

./gdbtest/main.cpp:#include

./test_t.cpp:#include

./testshareptr.cpp:#include

-rn:递归查找并显示行号

[albert@localhost#18:17:48#/home/albert/test]$grep -rn 'stream' . --include='*.cpp'

./testPtr.cpp:4:#include

./crab-server/code/main/crab.cpp:3:#include

./testConstructor.cpp:1:#include

./smartptr/auto_ptr.cpp:4:#include

./io.cpp:1:#include

./io.cpp:9:    ofstream logfile("./logs/players_distribution.txt", ios::out);

./ptr.cpp:4:#include

./gdbtest/main.cpp:1:#include

./test_t.cpp:1:#include

./testshareptr.cpp:4:#include

-rni:递归查找显示行号并且忽略大小写

[albert@localhost#18:17:53#/home/albert/test]$grep -rni 'stream' . --include='*.cpp'

./testPtr.cpp:4:#include

./crab-server/code/main/crab.cpp:3:#include

./testConstructor.cpp:1:#include

./epoll_cs_demo/testfd.cpp:5:   int listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/testfd.cpp:8:   listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/testfd.cpp:11:  listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/testfd.cpp:14:  listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/testfd.cpp:21:  listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/testfd.cpp:25:  listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/client.cpp:18:    int client_fd = socket(AF_INET, SOCK_STREAM, 0);

./epoll_cs_demo/server.cpp:24:    int listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./smartptr/auto_ptr.cpp:4:#include

./io.cpp:1:#include

./io.cpp:9:    ofstream logfile("./logs/players_distribution.txt", ios::out);

./network/zgetaddrinfo.cpp:37:    hints.ai_socktype = SOCK_STREAM;/* Stream socket */

./linux_version/client.cpp:15:    int client_fd = socket(AF_INET, SOCK_STREAM, 0);

./linux_version/server.cpp:15:    int listen_fd = socket(AF_INET, SOCK_STREAM, 0);

./ptr.cpp:4:#include

./gdbtest/main.cpp:1:#include

./test_t.cpp:1:#include

./testshareptr.cpp:4:#include

总结

查找指定内容的简单命令:grep -rn 'stream' . --include='*.cpp'

这个grep有很多附加的参数,看了文档之后发现了一个点,原来用法:egrep即grep -E,fgrep即rep -F,但是 egrep 和 fgrep现在都不建议使用了,无论是man手册还是--help选项中都提到了这一点

---------------------

作者:AlbertS

来源:CSDN

原文:https://blog.csdn.net/albertsh/article/details/88539715

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值