Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
Shell 更改日志文件中的时间格式_Shell_Sed - Fatal编程技术网

Shell 更改日志文件中的时间格式

Shell 更改日志文件中的时间格式,shell,sed,Shell,Sed,我有以下格式的squid日志文件: 31/Jul/2014:13:44:52 +0400.701 0 172.16.204.59 TCP_DENIED/407 5232 GET http://vec01.maps.yandex.net/tiles? - NONE/- text/html 但是日志分析器需要unix格式的时间 date命令可以转换为unix格式: date -d "31 Jul 2014 12:51:57 +0400" '+%s' 1406796717 但我无法编写用于更改格

我有以下格式的squid日志文件:

31/Jul/2014:13:44:52 +0400.701 0 172.16.204.59 TCP_DENIED/407 5232 GET http://vec01.maps.yandex.net/tiles? - NONE/- text/html
但是日志分析器需要unix格式的时间

date命令可以转换为unix格式:

date -d "31 Jul 2014 12:51:57 +0400" '+%s'

1406796717

但我无法编写用于更改格式的sed命令。请帮助我。

比处理日志文件后更好的方法是在中配置日志中使用的时间格式,以便生成正确的日期/时间格式。

例如,您可以使用:

$ date -d"$(sed -r 's#^([0-9]{2})/(\w*)/([0-9]{4}):([0-9:]{8}).*#\1 \2 \3 \4#' file)"
Thu Jul 31 13:44:52 CEST 2014
利用此sed:

$ sed -r 's#^([0-9]{2})/(\w*)/([0-9]{4}):([0-9:]{8}).*#\1 \2 \3 \4#' file
31 Jul 2014 13:44:52
它从包含以下数据的行的开头捕获文本:
XX/word/YYYY:ZZZ
,是8位数字和分号的组合

或者更准确地说:

sed -r 's#^([0-9]{2})/(\w*)/([0-9]{4}):([0-9]{2}:[0-9]{2}:[0-9]{2}).*#\1 \2 \3 \4#' file

在squid配置中配置正确的格式不是更好吗?是的,更好。我发布了我的答案,假设OP没有可能改变它。事实上,我不知道squid,所以我不知道我的假设有多现实:在一家IT公司,坐在他旁边的同事“一切照旧”,不知道这个要求。现在两人都愿意改变,但由于重要的“事情”,它现在是“遗产”。。。你说得对如何使用date命令创建具有正确时间格式(unix时间戳)的输出文件?@hek2mgl ooh旧代码和旧配置。他们说,环境的准备工作应该持续很长时间,这样才能找到好的解决方案。否则,所有的未来都会有这种障碍。量两次,剪一次,我做到了。但我需要分析旧数据。