sed를 사용한 조건부 대체?

sed를 사용한 조건부 대체?

나는 sed교체하고있다url(\'test.png\')url(\'/navigation/test.png\')

이 명령을 사용하면 잘 작동합니다

sed -i "s#url(\\\'#url(\\\'/navigation/#g" "main.js"

/ 그러나 이미 다음으로 시작하는 URL 문을 제외하고 싶습니다.url(\'/favicon.png\')

가능합니까 sed?

답변1

핵심은 정규식에 더 많은 컨텍스트를 제공하는 것입니다.

sed -e "s#\\(url(\\\\'\\)\\(test.png\\\\')\\)#\1/navigation/\2#g"

또한 참고하십시오:

  • 큰따옴표 안에는 '특별한 것이 없습니다.
  • \\큰 따옴표 안에는 \.

답변2

이를 사용하여 [^/]슬래시를 제외한 모든 문자를 url(\'[^/]명령의 패턴으로 일치시킬 수 있습니다 s. 이것은 물론 첫 번째 문자를 파괴하므로 \([^/]\)대체에서 보존 할 수 있도록 하위 표현식을 만들어야 합니다 .\1

sed -i "s#url(\\\'\\([^/]\\)#url(\\\'/navigation/\\1#g" "main.js"

또 다른 시도는 항상 교체하는 것이지만 이미 슬래시가 있는 경우 되돌리는 것입니다.

sed -i "s#url(\\\'#url(\\\'/navigation/#g;s#navigation//##g" "main.js"

관련 정보