Как извлечь конкретную строку с помощью Perl? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть набор строк, таких как "-f /path/filename1.f", "-f $ path / filename2.f" и т. Д. В одном файле file.f. Я хочу прочитать file.f и extract / path/filename1.f, $ path / filename2.f и т. д. в другом файле. Я попытался найти решение в Интернете, но это выглядит как беспорядок.

Есть ли какое-то чистое и простое решение для такого простого поиска по шаблону?

ниже приведено требование Пример,

file.f (input file to perl script)
-f /path/filename1.f
-f $path1/filename2.f
-f /path/filename3.f
-f $path2/filename4.f

outputfile.f
/path/filename1.f
$path1/filename2.f
/path/filename3.f
$path2/filename4.f

По сути, я просто хочу строку пути из файла ..f

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Какой-то Perl-код для решения вашей проблемы:

use strict;
use warnings;

open my $fhi, "<", "file.f" or die "Error: $!";
open my $fho, ">", "output.f" or die "Error: $!";

while( <$fhi> ) {  # Read each line in $_ variable
    s/^-f //;      # Remove "-f " at the beginning of $_ 
    print $fho $_; # print $_ to output.f file
}
close $fhi;
close $fho;
1 голос
/ 07 ноября 2019

Посмотрите на приведенное ниже решение -

Здесь все, что после -f будет удалено.

#!/usr/bin/perl

use strict;
use warnings;

open(FILE,"<file.f"); 
while(<FILE>) 
    print "$1\n" if($_ =~ /^-f\s(.*)/);
}
1 голос
/ 07 ноября 2019

Простейшим способом является использование cut:

cut -f2 -d’ ‘ input_file > output_file

Или вы можете использовать Perl:

perl -lane ‘print $F[1]’ input_file > output_file

Эти решения извлекают второе поле ввода и распечатывают его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...