Perl + Przetłumacz składnię skryptu powłoki na perl + wyrażenie regularne


1

W moim /var/tmpmam następujące pliki:

 ls | grep FILE
   AAA-FILE.xml
   BBB-FILE.xml

Za pomocą następującego polecenia wycinam pierwsze słowo plików w następujący sposób:

ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"

Dostaję:

AAA
BBB

Jak mogę zrobić to samo z Perlem, aby wstawić „AAA” i „BBB” do @RESULTS? Na przykład:

@RESULTS=perl syntax ...

1
UUOG:sed -n "/FILE.xml/s/.FILE.*//p"
Ignacio Vazquez-Abrams

to nie jest perl, proszę zobaczyć odpowiedź
b0fh

1
I dlatego nie jest to odpowiedź.
Ignacio Vazquez-Abrams

Odpowiedzi:


3

Zakładając, że nadal chcesz używać istniejącego polecenia, możesz to zrobić

my @results = `ls /var/tmp | grep FILE.xml | sed "s/.FILE.*//"`;
chomp for @results;

Chomp polega na pozbyciu się nowej linii.

Bez uciekania się do wywoływania zewnętrznych poleceń:

my @results;
opendir DIR,"/var/tmp" or die "Cannot open dir: $!";
for (readdir DIR) {
    /(.*)-FILE.*/ or next;
    push @results, $1;
}
closedir DIR;

THX bardzo dobrze Wybieram drugą opcję w moim skrypcie perl
yael

coś jeszcze, jak zmienić składnię w przypadku, gdy „-” nie pojawia się na przykład z AAA1FILE.xml, zwróci AAA1
yael

Można zastąpić to ls|grep|sedzsed -ne's/.FILE.*//p' /var/tmp
Evan Carroll




1
perl -nE'next unless s/-FILE.*//; push state @lines, $_; die @lines if eof;' /var/tmp
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.