我想要替换一行python 代码,其中包含引号
原始文件中的行如下所示:
ScalarLogger("results.dat" ,('t',) + exp_data)
我想要将其替换为
ScalarLogger("results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + ".dat" , ('t',) + exp_data)
因此,我的方法是使用sed
命令:
sed -i 'e/results.dat/results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + ".dat/g' run.py
但是,我得到以下信息错误:
sh: 1: /results.dat/results_j + str(sys.argv[1]) + _h + str(sys.argv[2]) + .dat/g: not found
我尝试改变/
角色,但仍然不起作用。
答案1
你的sed
表情似乎在说e/.../.../g
而不是在说s/.../.../g
。
命令e
是标准实用程序的 GNU 扩展sed
,它使用参数(您的模式,包括字符/
和最后的/g
)作为 shell 命令,用该命令的输出替换数据(有点像命令替换)。
幸运的是,该命令未被找到,而不是一个有效的、破坏性的 shell 命令。
答案2
命令
awk -F "." '{print $1"_j""\""" + str(sys.argv[1]) + ""\"""_h""\""" + str(sys.argv[2]) +""\"""."$2}' filename
sed -e 's/results/&_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) + /g' -e 's/\.dat/"&/g' filename
Python
#!/usr/bin/python
m=open('filename','r')
for i in m:
k=i.split(".")
print k[0]+'_j" + str(sys.argv[1])+'+'"_h" + str(sys.argv[2]) + ".'+k[1]
输出
ScalarLogger("results_j" + str(sys.argv[1]) + "_h" + str(sys.argv[2]) +".dat" ,('t',) + exp_data)