您好我想替换document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
带
(function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();
在所有事件中......
所以我在下面的代码中使用了这个。
find /cygdrive/c/xampp/htdocs/news -type f -exec sed -i s#document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));#(function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);})();#g {} \;
但它没有取代。逃跑有什么问题吗?
由于
答案 0 :(得分:1)
sed -i“s / ^ document.write(unescape(。*; $ /(function(){var ga = document.createElement('script'); ga.type ='text / javascript'; ga。 async = true; ga.src =('https:'== document.location.protocol?'https:// ssl':'http:// www')+'。google-analytics.com / ga.js' ; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga,s);})(); /“example.txt
答案 1 :(得分:1)
嗯,第一步是单独检查sed
命令:
bash:意外令牌附近的语法错误`('
您必须将sed命令放入单引号或双引号中,以便将其作为单个参数传递给sed应用程序's#docum....'
。如果单引号内有单引号,或双引号内有双引号,则必须将其转义。
请注意,该命令看起来很丑陋,不易读取或维护,我会使用python或ruby,你会有特殊的引号来帮助克服字符串转义的问题......
答案 2 :(得分:1)
您需要将参数引用到sed,并转义任何嵌套引号。否则:
s#document.write(unescape("%3Cscript src='" + gaJsHost + ...
将被shell分成单独的单词,而不是作为单个参数传递给sed。
您需要用引号括起整个sed脚本(s#from#to#
部分),我会选择单引号,然后用'
替换脚本中的每个\'
。
(另外,为什么你使用的是find -exec
而不是我suggested?)
答案 3 :(得分:0)
即使不是直接答案,对于此类替换,您也可以使用“rpl”工具。 看起来你正在使用cygwin,因此你可以找到一个win32端口here。