我们正在修改某些配置文件的预期格式,我想创建一个脚本,将旧格式的文件转换为新格式。但是,我的脚本技能很生疏,我必须编写脚本,以至于在我再次需要脚本工具时会忘记脚本工具。我正在寻找关于如何编写脚本的建议。我最复杂的变化是修改ini文件,目前这些文件的多行文件如下所示:
device.name = xxx
我想将名称更改为标签,然后在名称上添加一些内容以使其唯一。特别是在这种情况下,我可能会使用找到该文件的文件夹的名称。所以如果文件在YY文件夹中,我会将上面的内容更改为:
device.label = xxx
device.name = xxx_YY
两者的排序无关紧要。多文件device.name值将存在于每个文件中,并且所有文件都必须更新。
我想知道哪种工具可以解决这个问题。这是在bash脚本中完成的事情,还是我应该关注python。如果这是在bash中完成的,我倾向于,有人可以告诉我应该使用哪种bash工具。我想我可以做sed或awk这样做,但我还没弄清楚到底是怎么回事。如果需要,我可以找出确切的语法(尽管语法是受欢迎的!),但是可以理解指向该工作的好工具的指针。
答案 0 :(得分:0)
在...... 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
如果您的文件中有部分,则需要进行修改。
答案 1 :(得分:0)
这正是awk发明的工作类型,也是最好的。没有更多的样本输入很难说,但这样的事情听起来就像你需要的那样:
awk -v dir="$(basename "$PWD")" '{lbl=$0; sub(/name/,"label",lbl); print lbl RS $0 "_" dir}' file