Ruby-从数组中的一行中提取一个字符串,并将其放在以下几行的开头

Ruby-从数组中的一行中提取一个字符串,并将其放在以下几行的开头,ruby,regex,Ruby,Regex,我正在处理日志文件,我需要从一行复制一个字符串,并将其复制到下一行的开头。。。请帮助[Ruby&Regex新手] 这是我的意见 18:07:12 grd TIMESTAMP 2/2/2014 12:19:24 IN A2010 drosa SA400583 12:19:24 IN A2010 dsrosa SA456583 0:07:26 grd TIMESTAMP 2/3/2014 22:19:24 IN A2010 dosa SA400583 22:10:21 IN A201

我正在处理日志文件,我需要从一行复制一个字符串,并将其复制到下一行的开头。。。请帮助[Ruby&Regex新手]

这是我的意见

18:07:12 grd TIMESTAMP 2/2/2014
12:19:24   IN A2010 drosa SA400583
12:19:24   IN A2010 dsrosa SA456583
0:07:26 grd TIMESTAMP 2/3/2014
22:19:24   IN A2010 dosa SA400583
22:10:21   IN A2010 dsrosa SA456583
我想记下日期,即2014年2月2日,并将其放在以下行的开头,直到找到下一个时间戳,即2014年2月3日。。。预期产量为

2/2/2014 12:19:24   IN A2010 drosa SA400583
2/2/2014 12:19:24   IN A2010 dsrosa SA456583
2/3/2014 22:19:24   IN A2010 dosa SA400583
2/3/2014 22:10:21   IN A2010 dsrosa SA456583
请帮忙。干杯

您可以使用它查找以特定模式开头的块:

input = <<EOD.lines
18:07:12 grd TIMESTAMP 2/2/2014
12:19:24   IN A2010 drosa SA400583
12:19:24   IN A2010 dsrosa SA456583
0:07:26 grd TIMESTAMP 2/3/2014
22:19:24   IN A2010 dosa SA400583
22:10:21   IN A2010 dsrosa SA456583
EOD

input.slice_before(/TIMESTAMP/).each do |first_line, *other_lines|
  timestamp = first_line[/\d+\/\d+\/\d+/]
  other_lines.each do |line|
    puts "#{timestamp} #{line}"
  end
end

我使用了
/TIMESTAMP/
(包含单词
TIMESTAMP
的行)作为模式,
/grd/
也可以工作。实际时间戳(
2/2/2014
)是使用从每个第一行提取的。请注意,
input
是一个数组。

您的输出不包括
2/3/2014
-这是一个错误吗?哎呀。。是的。。忘了更改日期嗨,对不起stephen。。。我将两个“*”放在前面,使开始行变为粗体。。。道歉。我现在更新了我的问题…相应地更新了我的答案。正则表达式足够灵活,可以使用或不使用额外字符。
2/2/2014 12:19:24   IN A2010 drosa SA400583
2/2/2014 12:19:24   IN A2010 dsrosa SA456583
2/3/2014 22:19:24   IN A2010 dosa SA400583
2/3/2014 22:10:21   IN A2010 dsrosa SA456583