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

一、前言

      最近需要查询大日志文件的时候,每次打开vim,cat之类的都会卡死,但是需要查看符合条件的共有多少行数据,这颗愁死我了,下面列出一些常用的匹配查询命令。

二、常用的搜索命令

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
(4)查询符合条件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端口的进程,十分好用。

============ 2019/12/5===================

三、搜索文件中的ip地址

1、匹配ip

grep -Eo '([^0-9]|\b)((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]|\b)' xxx.log | sed -nr 's/([^0-9]|\b)(([0-9]{1,3}\.){3}[0-9]{1,3})([^0-9]|\b)/\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的方法都差不错,因为日志文件一直在增大,所以查出来的结果也不一样,查的速度也比较慢,可能是文件太大了,在此记录一下,总有用得着的时候。

end

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
Linux中的grep命令用于在文件搜索指定的模式或字符串。它可以帮助我们快速定位和筛选出包含特定内容的。下面是使用grep命令的一些示例: 1. 在文件搜索指定的字符串: ```shell grep "pattern" file.txt ``` 这将在file.txt文件搜索包含"pattern"的,并将其输出。 2. 在多个文件搜索指定的字符串: ```shell grep "pattern" file1.txt file2.txt ``` 这将在file1.txt和file2.txt文件搜索包含"pattern"的,并将其输出。 3. 在目录中递归搜索指定的字符串: ```shell grep -r "pattern" directory/ ``` 这将在directory目录及其子目录中递归搜索包含"pattern"的,并将其输出。 4. 忽略大小写进搜索: ```shell grep -i "pattern" file.txt ``` 这将在file.txt文件中忽略大小写地搜索包含"pattern"的,并将其输出。 5. 输出匹配的数: ```shell grep -c "pattern" file.txt ``` 这将在file.txt文件搜索包含"pattern"的,并输出匹配的数。 6. 反向搜索,输出不包含指定字符串的: ```shell grep -v "pattern" file.txt ``` 这将在file.txt文件搜索不包含"pattern"的,并将其输出。 7. 使用正则表达式进搜索: ```shell grep -E "regex" file.txt ``` 这将在file.txt文件使用正则表达式"regex"进搜索,并将匹配的输出。 8. 输出匹配的及其上下文: ```shell grep -A 2 -B 2 "pattern" file.txt ``` 这将在file.txt文件搜索包含"pattern"的,并输出匹配的及其前后2的内容。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

铁柱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值