Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 随时间执行grep并在文件中提供输出的Shell脚本_Linux_Bash_Shell - Fatal编程技术网

Linux 随时间执行grep并在文件中提供输出的Shell脚本

Linux 随时间执行grep并在文件中提供输出的Shell脚本,linux,bash,shell,Linux,Bash,Shell,我想写一个脚本来执行这个命令 cat file.txt | grep-c'HH:MM'[此处HH:MM将从00:00到23:59] 以及输出内容希望以某种格式保存在文件中 00:00 - 2134 00:01 - 3127 . . . . 23:59-1298 提前感谢。脚本只有一行 #!/bin/bash cat /local/logs/access.log | grep -Eo "2017-04-25T[0-2][0-9]:[0-5][0-9]" | sort | uniq -c >

我想写一个脚本来执行这个命令

cat file.txt | grep-c'HH:MM'[此处HH:MM将从00:00到23:59] 以及输出内容希望以某种格式保存在文件中 00:00 - 2134 00:01 - 3127 . . . . 23:59-1298

提前感谢。

脚本只有一行

#!/bin/bash
cat /local/logs/access.log | grep -Eo "2017-04-25T[0-2][0-9]:[0-5][0-9]" | sort | uniq -c > /tmp/list.txt
执行后,我得到一个文件list.txt,当我打开它时,得到如下所述的列表


在grep命令中添加文件名时,可以避免使用额外的命令cat。 如果access.log已在日期排序,则可以跳过排序

grep -Eo "2017-04-25T[0-2][0-9]:[0-5][0-9]" /local/logs/access.log | uniq -c > /tmp/list.txt
使用access.log,您必须知道有人会攻击您的脚本,并通过尝试访问网页使统计失败 您可以使用sed来更多地控制如何选择子字符串

# test remove from start of line until the first [ and also remove the [,
# remember the matched date and remove the rest, replace by remembered string.
echo "127.0.0.1 - - [2017-04-25T11:11 +0000] GET /2017-04-25T22:22/fooledyou.html HTTP/1.1 200 140 - Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.5 Safari/535.19" |
   sed 's/[^\[]*\[\(2017-04-25T[0-2][0-9]:[0-5][0-9]\).*/\1/'

# your command
sed 's/[^\[]*\[\(2017-04-25T[0-2][0-9]:[0-5][0-9]\).*/\1/' /local/logs/access.log |
   uniq -c > /tmp/list.txt

你的问题是什么?像grep-Eo[0-2][0-9]:[0-5][0-9]| sort | uniq-c这样的东西?我的服务器中有一个文件,请求来自移动设备,计数像是每分钟超过100个请求。我想得到请求的计数,这样我就可以计算出在什么时候请求是高的。因此,当我执行cat file.txt | grep-c'10:30'时,它将给出10:30中的消息计数。同样的,也会得到00:00,00:01,00:02。。。23:59.消息流包括IP、描述和时间。这就是为什么我想随着时间过滤掉。并希望将所有计数存储在由脚本创建的关于时间的单独文件中。例如00:00-计数a,00:01-计数b,如下所示。希望这个解释有一些清晰的观点,我得到了解决方案。谢谢@WalterA。经过一些修改后,您的命令行工作正常