Tôi không thấy giải pháp python nên đây là:
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)
Ý tưởng cơ bản là đối với mỗi tệp được cung cấp trên dòng lệnh làm đối số, chúng tôi viết ra một tệp tạm thời và liệt kê từng dòng trong tệp gốc. Nếu chỉ số của dòng là 5, chúng tôi viết ra dòng khác nhau. Phần còn lại chỉ là thay thế tệp cũ bằng tệp tạm thời Demo:
$> 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
Điều tương tự có thể đạt được với sự hiểu biết danh sách. Dưới đây là một lớp lót của cùng một kịch bản:
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)])'
hoặc không có 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
Những gì còn lại chỉ đơn giản là chuyển hướng đầu ra của nội dung được chỉnh sửa sang một tệp khác với > output.txt