linux使用grep条件搜索大文件的行数等操作

编程

二、常用的搜索命令

1、grep搜索

                        grep 参数 文件名 | head     //从头查找

grep 参数 文件名 | wc- l //查看符合条件的有多少行

cat 文件名 |grep 参数$ //输出以该参数结尾的行内容

2、实例

(1)根据具体的参数来搜索行数

cat /data/weblogs/xxx.access.log  |grep "GET /pixel.jpg?"|wc -l 

4102386

(2)部分正则查询

cat /data/weblogs/em.evony.com.access.log |grep "25/Nov/2019:15:[00-59]" |wc -l 

120

查询25/Nov/2019:15时的所有数据,那么15时后面的分钟数就是00-59

(3)多个条件之间可以使用管道连接,查询同时符合两个条件的行数

cat /data/weblogs/xxx.log |grep "25/Nov/2019:15:[00-59]" |grep "GET /pixel.jpg?"|wc -l 

120

查询符合条件1或者符合条件2 的行数

cat /data/weblogs/xxx.log |grep -E "25/Nov/2019:15:[00-59] |GET /pixel.jpg?"|wc -l 

4098135

简写: grep -E "exp1|exp2|exp3" | wc -l

参考:https://blog.csdn.net/lijing742180/article/details/84959963

3、grep是模糊查询

在使用grep搜索端口号的时候,查出来的结果不尽人意,什么牛鬼蛇神都查出来了,例子如下:

netstat -anp |grep -i "80"

(Not all processes could be identified, non-owned process info

will not be shown, you would have to be root to see it all.)

tcp 0 0 127.0.0.1:80 0.0.0.0:* LISTEN -

tcp 0 0 10.17.2.50:80 0.0.0.0:* LISTEN -

tcp 0 0 216.66.17.189:80 0.0.0.0:* LISTEN -

tcp 0 0 10.17.2.50:10050 10.17.13.2:33801 TIME_WAIT -

推荐个更好用的,具体查询80端口的使用情况,使用命令:

 netstat -apn | awk "{split($4,arr,":"); if(arr[2] == "80") print $0}"

一步到位,查出来的都是80端口的进程,十分好用。

三、搜索文件中的ip地址

1、匹配ip

grep -Eo "([^0-9]|)((1[0-9]{2}|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9]).){3}(1[0-9][0-9]|2[0-4][0-9]|25[0-5]|[1-9][0-9]|[0-9])([^0-9]|)" xxx.log | sed -nr "s/([^0-9]|)(([0-9]{1,3}.){3}[0-9]{1,3})([^0-9]|)/2/p"|wc -l

31116275

2、查询每个ip出现的次数

grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"  xxx.log |sort|uniq -c

2 99.203.87.103

2 99.203.87.142

4 99.203.87.145

8 99.203.87.153

前面是出现次数,后面是ip

3、更精准的匹配ip

grep -E -o "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?).(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"  xxx.log|wc -l

32929372

4、模糊匹配ip

grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}" xxx.log|wc -l

32930309

5、多个条件查询ip,先根据限定条件获取指定的行数,然后再搜索ip的个数

cat xxx.log |grep "25/Nov/2019:15:[00-59]" |grep "GET /pixel.jpg?"|grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}"|wc -l 

1110

感觉这些查ip的方法都差不错,因为日志文件一直在增大,所以查出来的结果也不一样,查的速度也比较慢,可能是文件太大了,在此记录一下,总有用得着的时候。

以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,Redis,Swoole、Swoft、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要请戳PHP进阶架构师>>>视频、面试文档免费获取

或者点击观看视频:

亿级pv多级缓存并发架构案例分析(负载限流算法、去重、延迟队列)

文来源:https://blog.csdn.net/LJFPHP/article/details/103378223

以上是 linux使用grep条件搜索大文件的行数等操作 的全部内容, 来源链接: utcz.com/z/515372.html

回到顶部