To pytanie może wydaje się trochę łatwe, ale jestem nowicjuszem w REGEX. Piszę skrypt próbujący odczytać następujące dwa pliki "File1" "File2", zdobądź nazwę słowa po --eeep oznacza, że chcę uzyskać słowo Machine_test.2019.01 i zrób coś w rodzaju czytania pliku jak /tmp/machine_test.2019.01 Plik i sprawdź status plików. Po tym chcę sprawdzić drugie słowo po --eep, który jest maszynowo_train.2019.02 i zrobi to samo po zakończeniu wszystkie słowo w pliku1 i pliku2.

Przykład plików wewnątrz pliku1 i pliku2:

#!/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 )
...

Po pierwszej myślach pracuję nad niektórymi odpowiedziami i zrobiłem mały test na następujący sposób:

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);

Czy ktoś może mi powiedzieć, co jest nie tak z moją regularą na następstwie, próbowałem, gdybym wyznaczyłem swego siebie, a ja mogę uzyskać słowo po słowie - trzpień z następującymi.

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

Czy jest jakiś sposób, aby uzyskać słowo w pliku bez czytania linii informatycznej według linii, co mogę zrobić, aby uzyskać wszystkie nazwy po - przechowywać w pliku1 i pliku2? Każda pomoc byłaby bardzo doceniana.

0
Owen85 1 marzec 2019, 14:59

2 odpowiedzi

Najlepsza odpowiedź

Spróbuj czegoś takiego

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

Z danymi wejśćami

$ 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

$

Zakładając, że masz podobne

$ cat /tmp/Machine_Test.2019.01
ABC

$ cat /tmp/Machine_Train.2019.02
XYZ

$

Następnie polecenie,

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

XYZ


$
2
stack0114106 1 marzec 2019, 12:30

Możesz użyć

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

Zobacz Demo na Regexr.com .

0
Jan 1 marzec 2019, 12:03