sed 또는 PERL을 사용하여 파일 내용 바꾸기

sed 또는 PERL을 사용하여 파일 내용 바꾸기

이 정규식을 실행하고 싶습니다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.

관련 정보