![sed를 사용하여 인용된 표현식 찾기 및 바꾸기](https://linux55.com/image/186475/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%B8%EC%9A%A9%EB%90%9C%20%ED%91%9C%ED%98%84%EC%8B%9D%20%EC%B0%BE%EA%B8%B0%20%EB%B0%8F%20%EB%B0%94%EA%BE%B8%EA%B8%B0.png)
나는 원해요줄을 교체하다파이썬 코드, 여기서따옴표가 포함되어 있습니다.
원본 파일의 줄은 다음과 같습니다.
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)