나는 원해요줄을 교체하다파이썬 코드, 여기서따옴표가 포함되어 있습니다.
원본 파일의 줄은 다음과 같습니다.
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
명령sed
는 인수(문자 /
및 last 를 포함한 패턴 /g
)를 셸 명령으로 가져와 데이터를 해당 명령의 출력으로 바꾸는(명령 대체와 약간 비슷함) 표준 유틸리티에 대한 GNU 확장입니다 .
다행히 해당 명령을 찾을 수 없으며 유효하고 파괴적인 쉘 명령이 아닙니다.
답변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
파이썬
#!/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)