我想从tcp流文件中提取除http头之外的内容 内容如下 当满足两个^ M时,http标头结束
HTTP/1.1 200 OK^M
Last-Modified: Sat, 20 Mar 2010 09:43:12 GMT^M
Content-Type: video/x-flv^M
Date: Wed, 24 Oct 2012 14:34:13 GMT^M
Expires: Wed, 24 Oct 2012 14:34:13 GMT^M
Cache-Control: private, max-age=22124^M
Accept-Ranges: bytes^M
Content-Length: 29833281^M
Connection: close^M
X-Content-Type-Options: nosniff^M
Server: gvs 1.0^M
^M
FLV^A^E^@^@^@ ^@^@^@^@^R^@^CK^@^@^@^@^@^@^@^B^@
onMetaData^H^@^@^@^O^@^Hduration^@@i<97>
=p£×^@ starttime^@^@^@^@^@^@^@^@^@^@^Mtotalduration^@@i<97>
我的提取代码如下, 然后我运行:extract.pl&lt; tcp.flow 但似乎循环是无止境的, 这些代码有什么问题?谢谢!
#!/usr/bin/perl
$start=0;
$data="";
while(<STDIN>)
{
if ( $start eq 0 && $_ =~ /^\r\n/) { $start = 1; }
elsif ( $start eq 1 ) { $data = $data . $_; }
}
open(FH, ">sample.flv");
print FH $data;
close(FH);
答案 0 :(得分:1)
在读取数据之前在STDIN上调用binmode()
,文件内容可能会干扰文件读取。在写入数据之前,您也希望在FH上使用它。 HTH
答案 1 :(得分:1)
这是一个单行。然而,我认为没有理由无限循环。
perl -00 -lne '$i++ and print' file > sample.flv
哪个堕落者看起来像这样:
>perl -MO=Deparse -00 -lne '$i++ and print' input.txt
BEGIN { $/ = ""; $\ = "\n\n"; } # from -l and -00
LINE: while (defined($_ = <ARGV>)) { # from -n
chomp $_; # from -l, removes "\n\n" now
print $_ if $i++; # skips the first line
}
-e syntax OK
如果您需要先清理文件,请执行
perl -pi -le 's/[\r\n]+$//' input.txt