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

但是,我的正则表达式和记住路径似乎无法正常工作。我得到cat: 1: No such file or directory 的好像cat是在数字 1 上被调用(这应该是正则表达式的记忆部分)。我怎样才能解决这个问题?

4

1 回答 1

0

因为您$()在双引号内使用,shell 正在解析cat \1,剥离反斜杠并尝试运行cat 1以将其输出作为参数的一部分传递给 sed。sed 有一个命令 ( 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 回答