Saya tidak melihat solusi python jadi ini dia:
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)
Ide dasarnya adalah bahwa untuk setiap file yang disediakan pada baris perintah sebagai argumen, kami menulis file sementara dan menghitung setiap baris dalam file asli. Jika indeks baris adalah 5, kami menulis baris yang berbeda. Sisanya hanya mengganti file lama dengan Demo file temp:
$> 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
Hal yang sama dapat dicapai dengan pemahaman daftar. Di bawah ini adalah satu-baris dari skrip yang sama:
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)])'
atau tanpa 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
Apa yang tersisa di sana adalah dengan hanya mengarahkan output dari konten yang diedit ke dalam file lain > output.txt
Sergiy Kolodyazhnyy
sumber