1

簡単に言えば、Perl を使用して、ファイルからテキストを抽出し、そのテキストを新しいファイルに保存したいと考えています。

これまでのところ、私のコードは次のとおりです。

#!/usr/local/bin/perl

use warnings;
use strict;
use File::Slurp;
use FileHandle;

use Fcntl qw(:DEFAULT :flock :seek); # Import LOCK_* constants

my $F_IN = FileHandle->new("<$ARGV[0]");
my $F_OUT = FileHandle->new(">PerlTest.txt");

while (my $line = $F_IN->getline) {
    $line =~ m|foobar|g;
    $F_OUT->print($line);
    # I want to only copy the text that matches, not the whole line.
    # I changed the example text to 'foobar' to avoid confusion.
}

$F_IN->close();
$F_OUT->close();

明らかに、それは行をコピーしています。行全体ではなく、ファイルから特定のテキストを抽出して印刷するにはどうすればよいですか?

4

3 に答える 3

3

1 行に 1 回しか発生しない場合:

while (<>) {
   print "$1\n" if /(thebigredpillow)/;
}

1 行に複数回発生する可能性がある場合:

while (<>) {
   while (/(thebigredpillow)/g) {
      print "$1\n";
   }
}

使用法:

script file.in >file.out
于 2012-06-12T19:27:54.510 に答える
2

キャプチャ括弧を使用して、一致した文字列を取得できます。

while (my $line = $F_IN->getline) {
    if ($line =~ m|(thebigredpillow)|) {
        $F_OUT->print("$1\n");
    }
}

perldoc perlreを参照してください。

于 2012-06-12T19:27:32.663 に答える
1
#!/usr/local/bin/perl

use warnings;
use strict;
use IO::All;

my @lines = io($ARGV[0])->slurp;

foreach(@lines) {
    if(/thebigredpillow/g) {
        $_ >> io('PerlTest.txt');
    }
}
于 2012-06-12T19:30:15.553 に答える