이 정규식을 실행하고 싶습니다https://regex101.com/r/9LJAjZ/1sed 또는 perl을 사용하여 파일 내용을 바꾸십시오.
내가 맞다면 sed는 항상 탐욕스럽기 때문에 이것은 sed에서는 결코 작동하지 않을 것입니다. 하지만 어떻게 이 정규식을 Perl에서 작동하게 만들 수 있나요?
이것이 내가 지금까지 얻은 것입니다:
perl -pi.bak -e "s#url\(\\[\'|\"]((?!data:|\/).*)\\[\'|\"]\)#url\(\\\'/prefix/\1\\\'\)/#g" file.js
입력 파일 예:
url(\'font-awesome.woff\') url(\'bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')
예제 출력
url(\'/prefix/font-awesome.woff\') url(\'/prefix/bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')
답변1
명령을 약간 수정하십시오.
$ perl -pe 's#(url\()(\\['\''"])((?!data:|/).*?\2\))#$1$2/prefix/$3#g' foo
url(\'/prefix/font-awesome.woff\') url(\'/prefix/bont-awesome.woff\') url(\'/favicon.ico\') url(\'data:whatever\')
정규식(혜택으로 작은따옴표로 묶음 \'
) \"
은 다음과 같습니다.
s#(url\()(\\['"])((?!data:|/).*?\2\))#$1$2/prefix/$3#g
_____ ______ __________________
$1 $2 \2 $3
url( \' ...\')
\" ...\")
.*?
게으르고 대신 참조 그룹 등을 사용합니다 $1
( $2
패턴의 , 등과 달리 \1
) \2
.