Regex 如何在perl中将zcat与正则表达式一起使用?

Regex 如何在perl中将zcat与正则表达式一起使用?,regex,perl,file,compression,zcat,Regex,Perl,File,Compression,Zcat,我已压缩了.gz文件,希望使用以下方法打开: ./open.pl file.gz 基本上,我的目标是只打印出zip文件中与我的正则表达式匹配的某些行…文件很大,所以我现在只想输出到stdout…我该怎么做?我在想这样的事情: while(<>){ zcat $_ | <my regex> ???? } while(){ zcat美元???? } 此外,我不确定打印出与regex匹配的行的语法。我怀疑zcat是否能在gzip流的换行符分隔块上正确运行。相反,您将希

我已压缩了.gz文件,希望使用以下方法打开:

./open.pl file.gz
基本上,我的目标是只打印出zip文件中与我的正则表达式匹配的某些行…文件很大,所以我现在只想输出到stdout…我该怎么做?我在想这样的事情:

while(<>){
  zcat $_ | <my regex> ????
}
while(){
zcat美元????
}

此外,我不确定打印出与regex匹配的行的语法。

我怀疑
zcat
是否能在gzip流的换行符分隔块上正确运行。相反,您将希望在读取流时解压缩它。至少有两种方法可以做到这一点:

foreach my $argv (@ARGV) {
    open my $gz, "zcat $argv |";
    while (<$gz>) {
        # now $_ is an uncompressed line from the file $argv
        print if /my pattern/;
    }
}
foreach my$argv(@argv){
打开我的$gz,“zcat$argv |”;
而(){
#现在$\是来自文件$argv的未压缩行
打印if/my pattern/;
}
}

可能有一种解决方案也使用了
:gz
IO层,但我现在还不能完全正确。

我怀疑
zcat
是否能在gzip流的换行分隔块上正确运行。相反,您将希望在读取流时解压缩它。至少有两种方法可以做到这一点:

foreach my $argv (@ARGV) {
    open my $gz, "zcat $argv |";
    while (<$gz>) {
        # now $_ is an uncompressed line from the file $argv
        print if /my pattern/;
    }
}
foreach my$argv(@argv){
打开我的$gz,“zcat$argv |”;
而(){
#现在$\是来自文件$argv的未压缩行
打印if/my pattern/;
}
}

可能有一种解决方案也使用了
:gz
IO层,但我现在还不能完全正确地理解它。

下面是我做类似工作的方式

open( $handle, "zcat $ARGV[0]|" ) or die("Can't open $ARGV[0]: $!");
while( <$handle> ) {
if( /regex_pattern/ ) {
   print $_;
   }
}
open($handle,“zcat$ARGV[0]|”)或die(“无法打开$ARGV[0]:$!”);
而(){
if(/regex_pattern/){
打印美元;
}
}

以下是我做类似工作的方式

open( $handle, "zcat $ARGV[0]|" ) or die("Can't open $ARGV[0]: $!");
while( <$handle> ) {
if( /regex_pattern/ ) {
   print $_;
   }
}
open($handle,“zcat$ARGV[0]|”)或die(“无法打开$ARGV[0]:$!”);
而(){
if(/regex_pattern/){
打印美元;
}
}

toolic的建议要好得多,如果您不需要在perl脚本中进行额外处理。。。如果您不需要在perl脚本中进行额外处理,那么zgrep string_to_match file.gztoolic的建议要好得多。。。zgrep字符串_到_匹配文件.gz