find / cygdrive / c / xampp / htdocs / news4u -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'{} \;
这导致错误sed: -e expression #1, char 93: unknown option to
s'`
我正在使用Windows并使用'cygwin'来运行shell脚本。
如何解决这个问题,应该单引号进行转义,因为它再次用单引号括起来?
答案 0 :(得分:0)
退出/
正则表达式中的sed
(例如此处:google-analytics.com/ga.js
)或使用其他分隔符(例如s^^^
代替s///
)
答案 1 :(得分:0)
要逃避/
,你可以使用另一个分隔符,正如伊戈尔所说。
喜欢
echo //// | sed 's@////@====@'
但是还有很多'
也需要转义。
至少有两种方式:
第一个:
echo "111'222\"333" | sed 's/1'\''2/___/;s/2"3/__/;'
第二个:
echo "111'222" | sed "s/1'2/___/;s/2\"3/__/;"
你不能像'
一样逃避'\''
,因为'
之间的关系绝对无关紧要。逃避角色在那里不起作用。因此,首先需要让转义字符从'
转义,然后才能使用它。因此我们使用''\'''
构造。
但是,转义字符可以正常使用""
,因此您可以使用"\""
。
find /cygdrive/c/xampp/htdocs/news4u/apps/frontend/modules/alerts/templates \
-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" {} \;
应该可以正常工作。