【问题标题】:Using linux sed command in python os.system [duplicate]在python os.system中使用linux sed命令[重复]
【发布时间】:2021-03-02 16:04:53
【问题描述】:

我在使用带有 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 发生了变化?同样,当我尝试在 os.system 中编写整个命令而不使用字符串 sed 时,我会收到以下错误:


-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 linux sed


【解决方案1】:

Python(与许多其他编程语言一样)使用反斜杠 \ 作为字符串中的特殊字符,以生成其他难以处理的字符。一个众所周知的例子是'\n' 用于换行。事实证明,\1 也被解释为特殊的东西。要告诉 Python 将您的字符串 literally 理解为您输入的内容,请使用 r 前缀:

sed = r"sed -i.bak 's/^\(port = \).*/\15437/' "+path

这里r 代表“raw”或“regex(r正则表达式)”,后者是常见用例。

【讨论】:

  • 这里的 r 代表“raw”或“regex(正则表达式)”:不,它只是“raw”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-29
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 2016-10-17
  • 2016-10-18
  • 2020-10-10
相关资源
最近更新 更多