首页 > 解决方案 > sed中的变量替换通过python执行

问题描述

下面是我的 sed 命令:

sed "s/N([0-9]*)/sum('\1')/g" old.txt > new.txt

在 bash 终端中工作正常

但是下面的python代码不执行:-

file1=old.txt
file2.new.txt
sed_cmd = 'sed "s/0x\([0-9]*\)/sum('\1')/g" %s > %s' %(file1,file2)

我收到语法错误

在上面之后我需要做: -

subprocess.call([sed_cmd],shell=True)

标签: pythonsedvariable-substitution

解决方案


主要问题:

  • 单引号'在常规单引号字符串文字中未转义(这会使语法损坏)
  • \1在常规字符串文字内定义一个\x01字符、一个 SOH 字符,而不是一个正则表达式反向引用(需要两个字符组合,\这里是 + 1)。

您可以使用

sed_cmd = r"""sed "s/0x\([0-9]*\)/sum('\1')/g" {} > {}""".format(file1,file2)

详情

  • r"""..."""是一个三引号的原始字符串文字,您可以在其中自由使用未转义'的 and ",并且\chars 表示文字反斜杠
  • {}是格式字符串中的占位符,第一个将用括号中作为参数传递的第一个和第二个变量的内容填充(请参阅 参考资料.format(file1,file2))。

推荐阅读