我正在尝试从python脚本编辑配置文件。默认情况下,配置文件在一行上包含key=
,没有值。但是用户可能已经编辑了conf文件,因此它显示为key=value1
。如果是这种情况,我不想编辑值,但不要管它。我对sed的调用如下:
from subprocess import call
call(["/bin/sed", "-i", "s/key=\\n/key=val/", confPath])
但这无法匹配。我用\n
而不是\\n
尝试了它,并且由于'未终止的s命令'而导致崩溃。我已经尝试使用\\r
,但这也不匹配。
请注意,我无法致电s/key=/key=val/
,因为如果文件已包含key=valval1
,我最终可能会在conf文件中找到key=val1
。
答案 0 :(得分:2)
尝试使用Python的真正力量,这次它有昵称ConfigParser
模块,它为您提供了这种工作的完全舒适
https://docs.python.org/2/library/configparser.html
有cfg.ini:
[Main]
name=Jan
surname=Vlcinsky
你可以玩它:
>>> import ConfigParser
>>> fname = "cfg.ini"
>>> config = ConfigParser.RawConfigParser({"age": 100})
>>> config.get("Main", "name")
"Jan"
>>> config.get("Main", "age")
100
密钥"年龄"的默认值在ConfigParser.RawConfigParser
时刻给出。其他ConfigParser解析器也支持它。
这是阅读,写作也是可能的。
答案 1 :(得分:2)
我赞成@ Jan的使用python ConfigParser
的解决方案,但是如果你真的喜欢使用正则表达式,你可以使用$
行结束指示符而不是'明确地说:
call(["/bin/sed", "-i", "s/key=$/&val/", confPath])
key=$
表示“匹配字符串'key =',在该行后面没有其他内容。”
&
表示“在此处包含您设置的所有内容”,在您的情况下为“{KEY} =”