0

你好我想换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 {} \;

但它并没有取代。逃跑有问题吗?

谢谢

4

4 回答 4

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

于 2012-07-10T10:48:19.907 回答
1

好吧,第一步是sed单独检查命令:

bash:意外标记'('附近的语法错误

您必须将 sed 命令放在单引号或双引号中,以便将其作为单个参数传递给 sed 应用程序's#docum....'。如果单引号中有单引号,或者双引号中有双引号,则必须对其进行转义。

请注意,该命令看起来很丑陋,不是真正可读或可维护的,我会使用 python 或 ruby​​ 有特殊引号的地方,这将有助于克服字符串转义的问题......

于 2012-07-10T10:48:20.353 回答
1

您需要将参数引用到 sed,并转义任何嵌套引号。否则这个:

s#document.write(unescape("%3Cscript src='" + gaJsHost +  ...

将被 shell 分解成单独的单词,而不是作为单个参数传递给 sed。

您需要将整个 sed 脚本(s#from#to#部分)括在引号中,我会选择单引号,然后将'脚本中的每个替换为\'.

(另外,你为什么使用find -exec而不是我建议的?)

于 2012-07-10T11:16:37.690 回答
0

即使不是直接答案,也可以使用“rpl”工具进行此类替换。看起来你正在使用 cygwin,因此你可以在这里找到一个 win32 端口。

于 2012-07-10T10:47:24.260 回答