我有一个配置文件,我希望将IPADDR=someIP
开头的行替换为我的变量ipaddr
我的代码:
for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
if line.strip().startswith('IPADDR='):
line ="IPADDR="+ipaddr
sys.stdout.write(str((line)) + "\n")
它确实正确设置了我想要的行,但也删除了所有其他行,但它只应删除空行,为什么不保留其他现有行?
THX
答案 0 :(得分:4)
你应该write line
所有行:
for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"],
inplace=True):
if line.strip().startswith('IPADDR='):
line ="IPADDR="+ipaddr
sys.stdout.write(str((line)) + "\n") #<-- here, indentation
要跳过空行,方法可能是:
...
stripped = line.strip()
is_not_blank = bool( stripped )
startswithIPADDR = not is_blank and stripped.startswith('IPADDR=')
if is_not_blank:
if startswithIPADDR:
line ="IPADDR="+ipaddr
sys.stdout.write(str((line)) + "\n") #<-- here, indentation
答案 1 :(得分:1)
一切都很好,除非你没有写出不以&#39; IPADDR&#39;开头的文件的其余部分,只需添加该行,一切都应该是好的。
for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
if line.strip().startswith('IPADDR='):
line ="IPADDR="+ipaddr
sys.stdout.write(str((line)) + "\n")
elif len(line.strip()) > 0: # add this and below line
sys.stdout.write(line) + "\n")
答案 2 :(得分:0)
终于使用:
解决了它for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
if line.strip().startswith('IPADDR='):
line ="IPADDR="+ipaddr
sys.stdout.write(str((line)) + "\n")
elif len(line.strip()) > 0:
sys.stdout.write(str((line) + "\n"))
for line in fileinput.input(["/etc/sysconfig/network-scripts/ifcfg-ens192"], inplace=True):
line = line.strip()
if line == '': continue
print line
非常感谢你们两个人!