1

jquery関数呼び出しを含むjavascriptファイルがあります:

$.getScript('/scripts/files/file.js');

その行をそのパスのファイルの内容に置き換えたいと思います。これは私がこれまでに持っているbashスクリプトです:

cat public/scripts/old.js | sed -e "s/$\.getScript\('(.)+'\);/$(cat \1)/g"  > public/scripts/new.js

ただし、私の正規表現とパスの記憶は正しく機能していないようです。番号1(正規表現の記憶されている部分)で呼び出されているようcat: 1: No such file or directory に見えます。catどうすればこれを修正できますか?

4

1 に答える 1

0

二重引用符の内側を使用しているため$()、シェルは を解析し、バックスラッシュを取り除き、実行してその出力を引数の一部として sed に渡そcat \1うとします。cat 1Sed にはrファイルを読み取るためのコマンド ( ) がありますが、ファイル名はリテラルである必要があり、以前の sed コマンドの結果であってはなりません (少なくとも標準の sed では、おそらく一部の実装でその機能が提供されます)。 sedこれには本当に間違ったツールです。awk ソリューションを実行できますが、脆弱になります。

考えられる perl ソリューションは次のとおりです (警告: 壊れやすい):

perl -ne 'if( $_ =~ /\$\.getScript\('"'(.*)'"'\)/ ) 
   { system( "cat $1" ) } else {print}' public/scripts/old.js
于 2012-06-05T19:28:09.933 に答える