Extraiga texto y escriba en un archivo nuevo en Perl
Frecuentes
Visto 3,845 veces
1
En pocas palabras, quiero extraer texto de un archivo y guardar ese texto en un archivo nuevo, usando Perl.
Aquí está mi código, hasta ahora:
#!/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();
Obviamente, está copiando la línea. ¿Cómo puedo extraer e imprimir texto específico de un archivo, en lugar de la línea completa?
3 Respuestas
3
Si solo puede ocurrir una vez por línea:
while (<>) {
print "$1\n" if /(thebigredpillow)/;
}
Si puede suceder varias veces por línea:
while (<>) {
while (/(thebigredpillow)/g) {
print "$1\n";
}
}
Uso:
script file.in >file.out
Respondido 04 Jul 16, 20:07
2
Podría usar paréntesis de captura para tomar la cadena coincidente:
while (my $line = $F_IN->getline) {
if ($line =~ m|(thebigredpillow)|) {
$F_OUT->print("$1\n");
}
}
Vea perldoc perlre.
Respondido 04 Jul 16, 20:07
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');
}
}
Respondido el 12 de junio de 12 a las 20:06
m//g en contexto vacío no tiene sentido. ¿Y qué texto específico quieres copiar? ¿"la gran almohada roja"? - ikegami
Bueno, es solo un ejemplo. Podría haberlo hecho foobar, supongo. Lo que me gustaría es buscar en el archivo una cadena, usando expresiones regulares. Si lo encuentra, copie dicha cadena en un archivo. ¿Por qué m//g no tiene sentido? Lo he usado antes para otros trabajos, simplemente no para buscar y extraer texto en un nuevo archivo. Gracias por tu ayuda. - user717236
¿Qué crees que hace m//g en un contexto vacío? Ni siquiera puedo imaginar un significado sensato para ello. - ikegami
Bueno, lo he usado antes, similar al anterior, para una expresión regular sustituta, buscando y reemplazando a través de un archivo completo (no línea por línea). Pero yo divago. Cualquiera que sea la forma en que llegue a la solución a la pregunta anterior sería excelente. Gracias. - user717236
Que algo diferente hiciera algo útil no tiene nada que ver con eso que se está discutiendo. No dije que "g" es inútil. - ikegami