我有一个带有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
似乎在{1}上调用cat
(应该是正则表达式的记忆部分)。我该如何解决这个问题?
答案 0 :(得分: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