
この正規表現を実行したい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
。