यह ज्यादातर ऑफ-टॉपिक है, लेकिन आप इसका उपयोग कर सकते हैं
find -maxdepth 1 -type f -name '*.txt' | xargs python -c '
import fileinput
for line in fileinput.input(inplace=True):
print line.replace("blah", "blee"),
'
यहां मुख्य लाभ (ओवर ... xargs ... -I {} ... sed ...) गति है: आप sed10 मिलियन बार निवेश करने से बचते हैं । यह तब भी तेज़ होगा जब आप पायथन का उपयोग करने से बच सकते थे (चूँकि अजगर धीमे, अपेक्षाकृत प्रकार का है), इसलिए पर्ल इस कार्य के लिए बेहतर विकल्प हो सकता है। मुझे यकीन नहीं है कि पर्ल के साथ आसानी से समकक्ष कैसे किया जाए।
जिस तरह से यह काम करता है, वह xargsपायथन को कई तर्कों के साथ आमंत्रित करेगा, क्योंकि यह एक ही कमांड लाइन पर फिट हो सकता है, और ऐसा तब तक करता रहेगा जब तक कि यह तर्कों से बाहर नहीं निकलता (जो कि आपूर्ति की जा रही है ls -f *.txt)। प्रत्येक आह्वान के तर्कों की संख्या फिलानेम की लंबाई और um, कुछ अन्य सामान पर निर्भर करेगी। fileinput.inputसमारोह प्रत्येक मंगलाचरण के तर्कों में नामित फ़ाइलों से लगातार लाइनों पैदावार, और inplaceविकल्प यह जादुई "पकड़" उत्पादन के लिए और इसका इस्तेमाल प्रत्येक पंक्ति को बदलने के लिए कहता है।
ध्यान दें कि पायथन की स्ट्रिंग replaceविधि regexps का उपयोग नहीं करती है; यदि आपको जरूरत है, तो आपको इनका import reउपयोग करना होगा print re.sub(line, "blah", "blee")। वे पर्ल-कम्पेटिबल रेग्जैम्प्स हैं, जो आपके साथ मिलने वाले भारी फोर्टिफाइड संस्करणों की तरह हैं sed -r।
संपादित करें
जैसा कि अकीरा ने टिप्पणी में उल्लेख किया है, कमांड के ls -f *.txtस्थान पर ग्लोब ( ) का उपयोग करने वाला मूल संस्करण findकाम नहीं करेगा क्योंकि ग्लब्स को शेल ( bash) द्वारा ही संसाधित किया जाता है। इसका मतलब यह है कि कमांड चलाने से पहले, 10 मिलियन फ़ाइलनाम को कमांड लाइन में प्रतिस्थापित किया जाएगा। यह कमांड के तर्क सूची के अधिकतम आकार को पार करने के लिए बहुत अधिक गारंटी है। आप xargs --show-limitsइस पर सिस्टम-विशिष्ट जानकारी के लिए उपयोग कर सकते हैं ।
तर्क सूची के अधिकतम आकार को भी ध्यान में रखा जाता है xargs, जो उस सीमा के अनुसार अजगर के प्रत्येक आह्वान को पारित करने वाले तर्कों की संख्या को सीमित करता है। चूँकि xargsअभी भी कुछ समय के लिए अजगर को आमंत्रित करना होगा, अकीरा os.path.walkको फाइल लिस्टिंग प्राप्त करने के लिए उपयोग करने का सुझाव शायद आपको कुछ समय बचाएगा।
sedप्रत्येक फ़ाइल के लिए इनवॉइस करने से बच सकते हैं तो यह तेज़ होगा । मुझे यकीन नहीं है कि अगर फ़ाइलों की एक श्रृंखला को खोलने, संपादित करने, सहेजने और बंद करने का कोई तरीका हैsed; यदि गति आवश्यक है, तो आप एक अलग कार्यक्रम, शायद पर्ल या अजगर का उपयोग करना चाहते हैं।