我正在处理一个需要用另一个文件替换文件第一行的python脚本。
带有#!/bin/bash
的 #!/usr/bin/custom_shell
只有第一行必须改变,我尝试在subprocess.call中使用sed命令,但是没有成功,有人可以建议一个可爱而简单的方法来做到这一点。
答案 0 :(得分:1)
使用sed:
sed -e '1s:#!/bin/bash:#!/usr/bin/custom_shell:' yourfile.py
这会将位置写入标准输出。要使用替换的文本保存文件,请使用-i
标志:
sed -i '' -e '1s:#!/bin/bash:#!/usr/bin/custom_shell:' yourfile.py
答案 1 :(得分:0)
您根本不需要使用sed
和subprocess
。
import os
replacement, shebang_line = "#!/usr/bin/custom_shell\n", ""
with open("InputFile.txt") as input_file, open("tempFile.txt") as output_file:
# Find the first non-empty line (which is assumed to be the shebang line)
while not shebang_line:
shebang_line = next(input_file).strip()
# Write the replacement line
output_file.write(replacement)
# Write rest of the lines from input file to output file
map(output_file.write, input_file)
# rename the temporary file to the original input file
os.rename("tempFile.txt", "InputFile.txt")
答案 2 :(得分:0)
为什么不使用python打开文件,进行更改并将其写回文件?除非你的文件太大而无法存放在内存中。
for i in files_to_change:
with open(i,'rw') as f:
lines = f.readlines()
lines[lines.index("#!/bin/bash\n")] = "#!/usr/bin/custom_shell"
f.seek(0)
f.writelines(lines)
答案 3 :(得分:0)
最好的方法是修改文件到位
import fileinput
for line in fileinput.FileInput("your_file_name", inplace=True):
print("#!/usr/bin/custom_shell")
break