sed를 사용하여 인용된 표현식 찾기 및 바꾸기

sed를 사용하여 인용된 표현식 찾기 및 바꾸기

나는 원해요줄을 교체하다파이썬 코드, 여기서따옴표가 포함되어 있습니다.

원본 파일의 줄은 다음과 같습니다.

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)

관련 정보