читать файлы и получить все слова после определенного слова в Perl - PullRequest
0 голосов
/ 01 марта 2019

Этот вопрос может показаться немного легким, но я новичок в регулярных выражениях.Я пишу скрипт, пытающийся прочитать следующие два файла "file1" "file2". Получить имя слова после --keep означает, что я хочу получить слово Machine_Test.2019.01 и сделать что-то вроде чтения файла, такого как /tmp/Machine_Test.2019.01файл и проверьте статус файлов.После этого я хочу проверить второе слово после --keep, которое является Machine_Train.2019.02, и сделать то же самое после завершения получения всех слов в файлах file1 и file2.

пример файлов внутри file1 & file2:

#!/bin/csh -f

rsh -n machine1 "( run.py --keep Machine_Test.2019.01 --training 300 )

rsh -n machine2 "( run.py --keep Machine_Train.2019.02 --training 300 )
...

Для первой мысли я работаю над некоторыми ответами и провел небольшой тест по следующему:

my $file = " /tmp/file1 "
open(FI,$file) or die("Could not open  file.");
foreach my $line (<FI>) {
    if ( my $input =~ /\--keep\s+(\w+)/ ){
        my $found = $1;
        open another file maybe /tmp/$found
        and do something...
    } else {
        printf("no more find\n");
    }
}
close(FI);

Может ли кто-нибудь сказать мне, что не так с моим регулярным выражением на следующем, я попытался, если я сам задаю строку, и я могу получить слово после слова --keep следующим:

$input =~ /\--keep\s+(\w+)/

Или есть какой-нибудь способ получить слово в файле, не читая его построчно. Что я могу сделать, чтобы получить все имена после --- сохранить в file1 и file2?Любая помощь будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Попробуйте что-то вроде этого

 perl -lne ' /--keep\s+(\S+)/ and print "cat /tmp/$1" '

с заданными входными данными

$ cat owen.txt
#!/bin/csh -f

rsh -n machine1 "( run.py --keep Machine_Test.2019.01 --training 300 )

rsh -n machine2 "( run.py --keep Machine_Train.2019.02 --training 300 )


$ perl -lne ' /--keep\s+(\S+)/ and print "cat /tmp/$1" ' owen.txt
cat /tmp/Machine_Test.2019.01
cat /tmp/Machine_Train.2019.02

$

Предполагая, что у вас есть содержимое типа

$ cat /tmp/Machine_Test.2019.01
ABC

$ cat /tmp/Machine_Train.2019.02
XYZ

$

, а затем команда,

$ perl -lne ' if ( /--keep\s+(\S+)/ ) { $x=qx(cat /tmp/$1); print "$x" } ' owen.txt
ABC

XYZ


$
0 голосов
/ 01 марта 2019

Вы можете использовать

\Q--keep\E\s\K\S+

См. демо на regexr.com .

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