我想编写一个执行命令
的脚本 cat file.txt | grep -c 'HH:MM'
[此处HH:MM将于00:00至23:59]
什么输出想要以格式保存在文件中
00:00 - 2134
00:01 - 3127
。
。
。
。
23:59 - 1298
提前致谢。
答案 0 :(得分:0)
脚本是一行。
#!/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,当我打开它时,得到如下所述的列表。
答案 1 :(得分:0)
在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你必须意识到有人可以攻击"您的脚本(使统计信息失败)通过tryint访问网页http://yoursite/2017-04-25T11:11/fooledyou.html
您可以使用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