sed 문자열을 특수 문자로 찾아서 바꾸기

sed 문자열을 특수 문자로 찾아서 바꾸기

교체를 시도 중

window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

도착하다

window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

파일에서. 내가 뭘 시도한 거야?

sed -i 's~/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash"~ResourceManager.hotlegs + mainPage + ".html#" + newhash"' Warmblanket.js

몇 가지 sed 명령을 시도했지만 별로 도움이 되지 않았습니다. 귀하의 제안은 큰 도움이 될 것입니다.

답변1

이와 같이:

sed -i "s@'/loft-run'\+@@" warmblanket.js
  • 대체의 기본 형태는s/before/after/
  • 사용큰따옴표치료를 원하시면아포스트로피
  • @여기에서 기본 대신 구분 기호를 선택 /하면 대부분의 ASCII 테이블을 선택할 수 있습니다.

답변2

sed는 리터럴 문자열에 대해서는 모르고 정규식과 역참조가 활성화된 텍스트만 모릅니다. 리터럴 문자열에 대한 작업을 수행하려면 awk와 같이 해당 문자열을 이해하는 도구를 사용하세요.

$ cat file
window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + ".html#" + newhash;

$ awk \
    -v old="window.location = '/loft-run'+ResourceManager.hotlegs + mainPage + \".html#\" + newhash;" \
    -v new='window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;' \
    's=index($0,old) { $0=substr($0,1,s-1) new substr($0,s+length(old)) } 1' file
window.location = ResourceManager.hotlegs + mainPage + ".html#" + newhash;

"문자열에 s가 포함되어 있고 쉘이 --delimited 문자열에서 s를 허용하지 않기 때문에 대신 문자열 주위에 가 사용됩니다 .'old=...'''

관련 정보