मैंने अजगर के समाधान को यहाँ नहीं देखा, इसलिए यह है:
import sys
import os
def open_and_replace(filename):
with open(filename) as read_file:
temp = open("/tmp/temp.txt","w")
for index,line in enumerate(read_file,1):
if index == 5:
temp.write("NEW STRING\n")
else:
temp.write(line.strip() + "\n")
temp.close()
os.rename("/tmp/temp.txt",filename)
for file_name in sys.argv[1:]:
open_and_replace(file_name)
मूल विचार यह है कि कमांड-लाइन पर दिए गए प्रत्येक फ़ाइल को तर्क के रूप में, हम एक अस्थायी फ़ाइल लिखते हैं और प्रत्येक फ़ाइल को मूल फ़ाइल में एन्यूमरेट करते हैं। यदि लाइन का इंडेक्स 5 है, तो हम आउट लाइन लिखते हैं जो अलग है। बाकी बस पुरानी फ़ाइल को अस्थायी फ़ाइल के साथ बदल रहा है डेमो:
$> ls
file1.txt file2.txt file3.txt
$> cat file1.txt
line 1
line 2
line 3
line 4
GOOD MORNING
line 6
$> python ~/replace_5th_line.py file1.txt file2.txt file3.txt
$> cat file1.txt
line 1
line 2
line 3
line 4
NEW STRING
line 6
$> cat file2.txt
line 1
line 2
line 3
line 4
NEW STRING
line 6
सूची बोध के साथ ही इसे प्राप्त किया जा सकता है। नीचे एक ही लिपि का एक लाइनर है:
cat /etc/passwd | python -c 'import sys; print "\n".join(["CUSTOM" if index == 5 else line.strip() for index,line in enumerate(sys.stdin,1)])'
या बिना cat
python -c 'import sys; print "\n".join(["CUSTOM" if index == 5 else line.strip() for index,line in enumerate(sys.stdin,1)])' < /etc/passwd
जो कुछ बचा है, वह केवल संपादित की गई सामग्री के आउटपुट को किसी अन्य फ़ाइल में पुनर्निर्देशित करना है > output.txt