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

おすすめ記事