在两个上述时间之间从文件中获取数据

时间:2018-03-06 19:51:36

标签: unix sed

我想从大小约为25GB的大文件中获取数据。我正在使用SED命令来获取数据但不知何故它没有给我正确的输出。以下是文件的格式:

PID=382 00:00:01 PID=382 Received 'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb (10.120.174.110)
PID=382 00:00:01 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST' from client (10.120.174.110)
PID=382 00:00:02 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST' from client (10.120.174.110)
PID=382 00:00:02 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST' from client (10.120.174.110)
PID=4847 00:00:03 PID=4847 Returned 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST' fro.10.120.174.110)
PID=382 00:00:04 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:04 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:04 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:05 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:05 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:06 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:06 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:07 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:07 PID=389 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:07 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:07 PID=385 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:07 PID=382 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=382 00:00:07 PID=384 Received 'TESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTESTTEST
PID=4847 00:00:08 PID=4847 Received '<>'
PID=4848 01:00:00 PID=4848 Received '<>'
PID=4847 01:00:00 PID=4847 Received '<>'

现在我试图从sed命令获取00:00:02到01:00:00之间的数据,它正在跳过几行

sed -rne '/00:00:02/,/01:00:00/ p' filename

1 个答案:

答案 0 :(得分:0)

考虑修改后的输入样本

$ cat ip.txt
begin
begin
1234
6789
end
end
end
bar
end
0-42-1
begin
b
end
begin
a

OP中提到的sed解决方案不匹配多个结束正则表达式,如果没有匹配结束正则表达式,则匹配到文件末尾

$ sed -n '/begin/,/end/p' ip.txt
begin
begin
1234
6789
end
begin
b
end
begin
a


处理此问题的一种方法是使用缓冲区(我更喜欢使用awk / perl)

$ awk ' ef && !/end/{if(buf) print buf; buf=""; ef=bf=0}
        !bf && /begin/{bf=1; buf=$0; next}
        bf{buf=buf ORS $0}
        /end/{ef=1}
        END{if(ef && buf) print buf}
      ' ip.txt
begin
begin
1234
6789
end
end
end
begin
b
end