Je n'ai pas vu de solution python alors voici:
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)
L'idée de base est que pour chaque fichier fourni sur la ligne de commande comme argument, nous écrivons un fichier temporaire et énumérons chaque ligne dans le fichier d'origine. Si l'index de la ligne est 5, nous écrivons une ligne différente. Le reste remplace simplement l'ancien fichier par le fichier temporaire Démo:
$> 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
La même chose peut être obtenue avec la compréhension de la liste. Vous trouverez ci-dessous une ligne du même script:
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)])'
ou sans 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
Il ne reste plus qu'à rediriger la sortie du contenu édité vers un autre fichier avec > output.txt