在python脚本中使用sed命令替换文件的第一行

时间:2014-02-09 05:55:45

标签: python sed

我正在处理一个需要用另一个文件替换文件第一行的python脚本。

带有#!/bin/bash

#!/usr/bin/custom_shell

只有第一行必须改变,我尝试在subprocess.call中使用sed命令,但是没有成功,有人可以建议一个可爱而简单的方法来做到这一点。

4 个答案:

答案 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)

您根本不需要使用sedsubprocess

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