使用 sed 查找并替换带有引号的表达式

使用 sed 查找并替换带有引号的表达式

我想要替换一行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)

相关内容