아래와 같이 HTML 파일에 한 줄이 있습니다.
shahar.push(['remoteUrl', 'staging.zazzercode.com']);
remoteUrl
환경에 따라 값을 명령으로 바꾸고 싶습니다 sed
.
예를 들어,
shahar.push(['remoteUrl', 'staging.zazzercode.com']);
shahar.push(['remoteUrl', 'production.zazzercode.com']);
나는 사용했다
sed -i '/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);' predict.html
작동하지만 작은 따옴표를 제거 'remoteUrl'
하고 'staging.zazzercode.com'
HTML 오류가 발생합니다.
shahar.push([remoteUrl, staging.zazzercode.com]);
그래서 안전상의 이유로한 줄에 있는 sed
두 개의 작은따옴표 사이의 값을 변경하기 위해 명령을 변경하고 싶습니다.,
remoteUrl
sed
또는 전체 줄을 작은 따옴표로 바꾸려면 내가 알고 있는 것 이외의 다른 옵션을 원합니다 .
답변1
문제는 bash
명령줄을 마스터하기 전에 처리되고 있다는 것입니다 sed
. 이 경우 해결책은 바깥쪽 따옴표를 큰따옴표로 변경하는 것입니다.
sed -i "/remoteUrl/c\shahar.push(['remoteUrl','staging.zazzercode.com']);" predict.html
문제는 bash
에 명령을 전달하기 전에 인용 제거가 수행된다는 것입니다 sed
. Bash의 관점에서 볼 때 원래 명령은 bash
모든 따옴표가 제거된 일련 의 작은따옴표 문자열이었습니다 . 위 버전에서는 bash
작은따옴표와 큰따옴표로 묶인 문자열이 보입니다. While 은 bash
문자열을 에 전달하기 전에 이러한 큰따옴표를 제거 sed
하지만 내부 작은따옴표만 유지합니다.
답변2
그러니 안전을 위해
sed
, 한 줄에서 쉼표() 뒤의 두 개의 작은따옴표 사이의 값을 변경하기 위해 명령을 변경하고 싶습니다 .,
'remoteUrl'
sed "s/\('remoteUrl',.*'\).*\('\)/\1staging.zazzercode.com\2/"
s
그냥 찾아서 교체하고 교체하세요.
\(
그리고 \)
"이전" 문자열(먼저 지정됨)에서 하위 문자열을 식별합니다. ( \1
그리고 \2
최대) 이러한 하위 문자열을 대체 문자열에 복사합니다.\n
\9