在python os.system中使用linux-sed命令



我在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(";,后者是一种常见的用例。

最新更新