Encuentra línea que coincida con una expresión, copiar toda la línea, inserte en la nueva línea y reemplazar la expresión

votos
-2

Tengo varios archivos (yml, tf, XML) para los que tengo que encontrar una cadena es decir, var1, y luego insertar una nueva línea con foo2, el resto de la línea no se ha modificado. Ejemplo

variable my_vars {
  type = map

  default = {
    var1 = 10.48.225.160/28
    var2 = 10.48.225.160/28
    var3 = 10.48.225.160/28
    var4 = 10.48.225.160/28
  }
}

He probado el código de abajo pero necesito la edición en su lugar.

import sys
import string

def find(substr, replstr, infile):
    f = open(infile,rw)
    lines = f.readlines()
    for i in range(len(lines)):
        if substr in lines[i]:
            j = string.replace(lines[i], substr, replstr)
            lines.insert(i + 1, j)
    print \n.join(lines)

old_env = sys.argv[1]
new_env = sys.argv[2]
file = sys.argv[3]

find(old_env, new_env, file)
Publicado el 07/11/2018 a las 22:46
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
0
import sys
import string

def find(substr, replstr, infile):
    f = open(infile,"r")
    lines = f.readlines()

    for i in range(len(lines)):
        if substr in lines[i]:
            j = string.replace(lines[i], substr, replstr)
            lines.insert(i + 1, j)
    print "".join(lines)
    f.close()

    f = open(infile,"w")
    k = "".join(lines)
    f.writelines(k)
    f.close()

old_env = sys.argv[1]
new_env = sys.argv[2]
file = sys.argv[3]

find(old_env, new_env, file)

La única advertencia es que hay un partido en la última línea del archivo, el iterador se pierda este.

Respondida el 08/11/2018 a las 21:18
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more