Takže na príkazovom riadku môžem pohodlne urobiť niečo také:
perl -pne "s/from/to/" in > out
A ak to potrebujem zopakovať a / alebo mám niekoľko ďalších perl -pne
transformácie, môžem ich uviesť, povedzme, a .bat
súbor v systéme Windows. To je samozrejme skôr okružný spôsob, ako to urobiť perl
skript, ktorý obsahuje všetky tie regexové transformácie.
Ako to píšete? Ak mám shell skript obsahujúci tieto riadky:
perl -pne "s/from1/to1/" in > temp
perl -pne "s/from2/to2/" -i temp
perl -pne "s/from3/to3/" -i temp
perl -pne "s/from4/to4/" -i temp
perl -pne "s/from5/to5/" temp > out
Ako ich môžem dať všetky do jedného perl
script?
odpovede:
10 pre odpoveď č. 1-e
prijíma ľubovoľný komplexný program. Pripojte sa teda k substitučným operáciám.
perl -pe "s/from1/to1/; s/from2/to2/; s/from3/to3/; s/from4/to4/; s/from5/to5/" in > out
Ak skutočne chcete program Perl, ktorý explicitne spracováva vstupy a slučky, odložte jednoplášťovú kartu, aby ste videli vygenerovaný kód a pracovali odtiaľto.
> perl -MO=Deparse -pe "s/from1/to1/; s/from2/to2/; s/from3/to3/; s/from4/to4/; s/from5/to5/"
LINE: while (defined($_ = <ARGV>)) {
s/from1/to1/;
s/from2/to2/;
s/from3/to3/;
s/from4/to4/;
s/from5/to5/;
}
continue {
print $_;
}
-e syntax OK
6 pre odpoveď č. 2
Súvisiaca odpoveď na otázku, ktorú ste nenašli celkom opýtaj sa: perl špeciálna premenná $^I
, používa sa spolu s @ARGV
, poskytuje editáciu na mieste -i
, Rovnako ako v prípade voľby -p, Deparse zobrazí vygenerovaný kód:
perl -MO=Deparse -pi.bak -le "s/foo/bar/"
BEGIN { $^I = ".bak"; }
BEGIN { $/ = "n"; $ = "n"; }
LINE: while (defined($_ = <ARGV>)) {
chomp $_;
s/foo/bar/;
}
continue {
print $_;
}