sed 명령을 사용하여 특정 단어가 포함된 줄에서 작은따옴표 안의 값을 바꿉니다.

sed 명령을 사용하여 특정 단어가 포함된 줄에서 작은따옴표 안의 값을 바꿉니다.

아래와 같이 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

관련 정보