【问题标题】:scripting tool to modify configuration files [closed]修改配置文件的脚本工具[关闭]
【发布时间】:2014-08-01 21:28:31
【问题描述】:

我们正在修改一些配置文件的预期格式,我想创建一个脚本来将旧格式的文件转换为新格式。然而,我的脚本技能已经生疏了,我必须很少编写脚本,以至于当我再次需要脚本工具时我会忘记它们。我正在寻找有关如何执行脚本的建议。我最复杂的更改是修改 ini 文件,这些文件目前会有多行,如下所示:

device.name = xxx

我想将名称更改为标签,然后在名称上附加一些内容以使其唯一。特别是在这种情况下,我可能会使用找到该文件的文件夹的名称。因此,如果该文件位于 YY 文件夹中,我会将上述内容更改为:

device.label = xxx
device.name = xxx_YY

两者的顺序无关紧要。多个 device.name 值将存在于每个文件中,并且必须全部更新。

我想知道什么工具最适合解决这个问题。这是简单地在 bash 脚本中完成的事情,还是我应该看看 python。如果这是在我倾向于使用的 bash 中完成的,那么有人可以告诉我应该使用哪个 bash 工具。我想我可以让 sed 或 awk 做到这一点,但我还没有弄清楚如何做到这一点。如果需要,我可以计算出确切的语法(尽管欢迎使用语法!),但如果能提供一个适合这项工作的好工具,我将不胜感激。

【问题讨论】:

    标签: python bash awk sed scripting


    【解决方案1】:

    之前也有人问过这个问题......Duplicate

    import configparser
    filename = r'C:\directory\sub_directory\FILE.INI'
    config = configparser.ConfigParser()
    config.read(filename)
    config['device.label'] = config['device.name']
    modified_name = str(config['device.name']) + '_' + filename.split['\\'][2]
    config['device.name'] = modified_name
    
    with open(filename, 'w') as configfile:
        config.write(configfile)
    

    将产生:

    device.label = xxx
    device.name = xxx_subdirectory
    

    如果您的文件中有部分,则需要对其进行修改。

    【讨论】:

      【解决方案2】:

      这正是 awk 被发明出来并做得最好的工作类型。如果没有更多示例输入,很难说,但听起来像您需要的东西:

      awk -v dir="$(basename "$PWD")" '{lbl=$0; sub(/name/,"label",lbl); print lbl RS $0 "_" dir}' file
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多