Dla prostego jedną wkładką z -n
lub -p
, chcesz
perl -i~ -pe 's/foo/bar/' *.aspx
-i~
mówi zmodyfikować każdy plik docelowy w miejscu i pozostawić oryginalny jako zapasową z ~
przyrostek dodawany do pliku Nazwa. (Pomiń przyrostek, aby nie zostawić kopii zapasowej, ale jeśli nadal uczysz się lub eksperymentujesz, to jest zły pomysł, usunięcie kopii zapasowych, gdy skończysz, jest znacznie mniej kłopotliwe niż przywracanie oryginałów z kopii zapasowej, jeśli coś zepsuć.)
Jeśli kod Perl jest zbyt skomplikowane dla jednej liniowej (lub po prostu na tyle użyteczny do ponownego wykorzystania) oczywiście zastąpić -e '# your code here'
z scriptname.pl
... chociaż to może byłaby scriptname.pl
więc, że akceptuje listę argumentów nazw plików, i po prostu użyj scriptname.pl *.aspx
, aby uruchomić go na wszystkich plikach *.aspx
w bieżącym katalogu.
Jeśli potrzebujesz powtórzyć strukturę katalogów i znaleźć wszystkie pliki o określonym wzorcu nazewnictwa, przydatne jest narzędzie find
.
find . -name '*.aspx' -exec perl -pi~ -e 's/foo/bar/' {} +
Jeśli Twój find
nie obsługuje -exec ... +
spróbować z -exec ... \;
chociaż to będzie wolniejszy i uruchomić więcej procesów (po jednym w każdym pliku znajdziesz zamiast tak mało, jak to możliwe, aby przetworzyć wszystkie pliki).
jedynie zeskanować kilka katalogów, wymienić .
(których nazwy bieżący katalog) z rozdzieloną spacjami listą z katalogów w celu zbadania, czy nawet użyć find
znaleźć sobie (i to może badać -execdir
do robienia czegoś w katalogach każdy katalog, który wybiera find
ze złożoną, skomplikowaną, krytyczną z biznesowego punktu widzenia, może tajną listą predykatów opcji find
).
Być może także przeglądaj find2perl
, aby wykonać tę rekursję katalogu natywnie w Perlu.
Zobacz http://stackoverflow.com/questions/506009/ skanowanie-wiele-plików-w-perlu – daotoad
Czy można wyeksportować dane wyjściowe do pliku, zamiast je mieć w terminalu? –