-n
या -p
के साथ एक सरल एक लाइनर के लिए, यदि आप चाहते
perl -i~ -pe 's/foo/bar/' *.aspx
-i~
जगह में प्रत्येक लक्ष्य फ़ाइल को संशोधित, और एक ~
प्रत्यय के साथ एक बैकअप के रूप मूल छोड़ने के लिए फ़ाइल को जोड़ा गया कहते हैं नाम। (बैकअप छोड़ने के लिए प्रत्यय को छोड़ दें। लेकिन यदि आप अभी भी सीख रहे हैं या प्रयोग कर रहे हैं, तो यह एक बुरा विचार है; बैकअप को हटाते समय बैकअप को हटाकर बैकअप से मूल को बहाल करने से बहुत छोटी परेशानी होती है यदि आप कुछ गड़बड़ करते हैं।)
यदि आपका पर्ल कोड (या बस पर्याप्त उपयोगी पुन: प्रयोज्य होने के लिए) स्पष्ट रूप से scriptname.pl
साथ -e '# your code here'
की जगह ... हालांकि तो शायद refactor scriptname.pl
इतना है कि यह फ़ाइल नाम तर्कों की सूची को स्वीकार करता है एक एक लाइनर के लिए बहुत जटिल है, और वर्तमान निर्देशिका में सभी *.aspx
फ़ाइलों पर चलाने के लिए बस scriptname.pl *.aspx
का उपयोग करें।
यदि आपको निर्देशिका संरचना की पुन: सेवा करने और किसी विशेष नामकरण पैटर्न के साथ सभी फ़ाइलों को खोजने की आवश्यकता है, तो find
उपयोगिता उपयोगी है।
find . -name '*.aspx' -exec perl -pi~ -e 's/foo/bar/' {} +
अपने find
का समर्थन नहीं करता -exec ... \;
साथ -exec ... +
कोशिश हालांकि यह धीमी हो और अधिक प्रक्रियाओं का शुभारंभ (फ़ाइल प्रति एक आप सभी फ़ाइलों को प्रोसेस करने के रूप में कुछ करने के बजाय लगता है) होगा।
केवल कुछ निर्देशिकाओं को स्कैन करने के लिए, की जगह .
(जो नाम वर्तमान निर्देशिका) निर्देशिका के एक अंतरिक्ष अलग की गई सूची के साथ जांच, या यहाँ तक find
का उपयोग निर्देशिका के लिए खुद को (और फिर शायद में कुछ कर रही के लिए -execdir
का पता लगाने को खोजने के लिए करने के लिए प्रत्येक निर्देशिका जो find
आपके जटिल, जटिल, व्यापार-महत्वपूर्ण के साथ चयन करती है, शायद find
विकल्प की गुप्त सूची भविष्यवाणी करती है)।
शायद इस निर्देशिका को पर्ल में मूल रूप से रिकर्सन करने के लिए find2perl
का पता लगाएं।
http://stackoverflow.com/questions/506009/ देखें स्कैनिंग-एकाधिक-फाइल-इन-पर्ल – daotoad
क्या टर्मिनल में होने के बजाय आउटपुट को फ़ाइल में निर्यात करना संभव है? –