我在os.system()
中使用sed命令时遇到问题
path= "/backup/verify/2020-11-19_test_pg_basebackup_daily_verify/postgresql.conf"
sed = "sed -i.bak 's/^(port = ).*/15437/' "+path
print(sed)
os.system('{}'.format(sed))
我打印sed
,看看出了什么问题,这就是我得到的:
sed -i.bak 's/^(port = ).*/l37/' /backup/verify/2020-11-19_test_pg_basebackup_daily_verify/postgresql.conf
为什么5437
发生了变化?同样,当我尝试在不使用字符串sed
的情况下将整个命令写入os.system
时,我会得到以下错误:
-bash-4.2$ ./func.py verify 2020-11-19_test_pg_basebackup_daily
File "./func.py", line 56
os.system('sed -i.bak 's/^(port = ).*/15437/' /backup/verify/2020-11-19_test_pg_basebackup_daily_verify/postgresql.conf')
^
SyntaxError: invalid syntax
Python(和许多其他编程语言一样(使用反斜杠作为字符串中的一个特殊字符,以生成在其他方面很棘手的字符。一个众所周知的例子是新线路的
'n'
。事实证明1
也被解释为一种特殊的东西。要告诉Python将字符串理解为您键入的字符串,请使用r
前缀:
sed = r"sed -i.bak 's/^(port = ).*/15437/' "+path
这里CCD_raw";或">regex(regular expression(";,后者是一种常见的用例。