Найти строку, соответствующую выражению, скопировать всю строку, вставить новую строку и заменить выражение - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть несколько файлов (yml, tf, xml), для которых мне нужно найти строку, т.е. var1, а затем вставить новую строку с помощью foo2, остальная часть строки не изменилась. Пример

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"
  }
}

Я попробовал код ниже, но мне нужно редактирование на месте.

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)

1 Ответ

0 голосов
/ 09 ноября 2018
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)

Единственное предупреждение: в последней строке файла есть совпадение, итератор пропустит это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...