用逗号分隔日期和时间

时间:2014-11-12 09:15:39

标签: sed access-log

我有行

的访问日志
http://***.com ,**.**.**.**,2013-06-07 12:03:58 ,Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0. 

我需要使用sed用逗号分隔日期和时间

3 个答案:

答案 0 :(得分:1)

好像你想要这样的东西,

$ sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\) \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\)/\1,\2/g' file
http://***.com ,**.**.**.**,2013-06-07,12:03:58 ,Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0. 
  • \([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)捕获日期字符串。
  • 匹配中间空格字符。
  • \([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\)捕获时间字符串。
  • 然后将组索引1中的\1个字符替换为匹配的字符串,组索引2中的, \2个字符。
  • \(\)在Basic正则表达式中调用捕获组。因此,例如\([0-9]\{4\}\)会将4位数字捕获到一个组中。

答案 1 :(得分:1)

使用awk

更加简单
awk -F, '{sub(/ /,",",$3)}1' OFS=, file
http://***.com ,**.**.**.**,2013-06-07,12:03:58 ,Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0.

使用,分隔文件,将3rd字段中的第一个空格替换为,

答案 2 :(得分:0)

复杂的sed

中有点安全
sed 's/\(,[-0-9]\{10\}\) *\([0-9:]\{8\},\)/\1,\2/g' YourFile

非常复杂的sed与简单的awk

中有点容易
sed 's/  */,/' YourFile

但是在这两种情况下(如前面的回复帖子),它假定文件中只有类似于样本的行。如果不是你必须提供另一个可能的文件(作为http日志,任何错误都可能发生错误URL消息,...)