首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一个文件中的不同命令中替换多个ip

在一个文件中的不同命令中替换多个ip
EN

Stack Overflow用户
提问于 2014-06-04 20:33:54
回答 3查看 67关注 0票数 0

我在一个文件中存储了以下命令集

代码语言:javascript
复制
ip ospf db area 0.0.0.0 rtr <ip> adv <ip> 
ip ospf db area 0.0.0.0 rtr <ip> self-originate 
ip ospf db area 0.0.0.0 rtr <ip>
ip ospf db area 0.0.0.0 rtr adv <ip> 
ip ospf db area 0.0.0.0 rtr orig 
ip ospf db area 0.0.0.0 rtr

需要用以下命令替换上面的命令集:-

代码语言:javascript
复制
ip ospf db area 0.0.0.0 rtr 222.0.0.1 adv 10.0.0.1 
ip ospf db area 0.0.0.0 rtr 222.0.0.1 self-originate 
ip ospf db area 0.0.0.0 rtr 100.0.0.1 
ip ospf db area 0.0.0.0 rtr adv 50.0.0.1 
ip ospf db area 0.0.0.0 rtr orig 
ip ospf db area 0.0.0.0 rtr

有人能建议一种方法来做到这一点吗?所有的ips都是不同的,这些类型的命令要多得多。必须对整个文件进行解析,并将ips替换为适当的值。

EN

回答 3

Stack Overflow用户

发布于 2014-06-04 21:02:05

正如DarinDouglass所说,您需要有一种方法来区分IP。如果文件具有固定的格式,并且您希望将第一次出现的<ip>替换为某个IP,第二次替换为另一个IP,依此类推,则可以执行以下操作:

代码语言:javascript
复制
import re

def replacer(l):
    i = iter(l)
    replace = lambda x: i.next()
    return replace

# example usage:
print re.sub("e", replacer(["1", "2", "3"]), "This is a sentence")

# prints "This is a s1nt2nc3"

re.sub接受返回字符串的自定义函数。replacer返回一个函数,当调用该函数时,将返回列表l中的下一个元素。

如果您提供有关您的问题的更多详细信息,我可以提供更多帮助。

票数 1
EN

Stack Overflow用户

发布于 2014-06-04 21:08:14

如果您知道ip地址的有序列表:

代码语言:javascript
复制
ip_token = "<ip>" # your ip positionning substring
ip_list  = ["127.0.0.1","127.0.0.2",...] # your ip list

with open("myfile","r+") as f:
    old = f.read()
    f.seek(0)

    #loop through file content
    for line in old:
        modified_line = line

        #replace the tokens by the ips
        while "<ip>" in modified_line:
            modified_line = modified_line.replace(ip_token,ip_list.pop(0),1)

        f.write(modified_line) 
票数 0
EN

Stack Overflow用户

发布于 2014-06-04 21:09:42

将ips存储为元组列表。每个元组表示一行,元组中的每个IP表示替换IP的顺序。

然后遍历你的文件。

对于每一行,使用enumerate获取其在文件中的位置,找到<ip>的位置,并将其替换为使用索引从元组列表中获取的元组。

如果您的元组列表中没有该索引的元素,则意味着您没有要替换的元素。

这种方法的问题是,在元组列表中需要与行一样多的项,如果要替换的文件很大,这是很浪费的。为了避免这种情况,您可以使用字典,其中键是行号,值是表示要替换的is的元组。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24037560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档