0

查找 /cygdrive/c/xampp/htdocs/news4u -type f -exec sed -i 's/document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' 类型='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 tos'`

我正在使用 Windows 并使用“cygwin”来运行 shell 脚本。

如何解决这个问题,并且应该转义单引号,因为它再次包含在单引号中?

4

2 回答 2

0

正则表达式/中的转义(例如这里:)或使用其他分隔符(例如,代替)。sedgoogle-analytics.com/ga.jss^^^s///

于 2012-07-10T10:10:02.750 回答
0

/正如 Igor 所提到的,要转义,您可以使用另一个分隔符。

喜欢

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" {} \;

应该可以正常工作。

于 2012-07-10T10:22:16.457 回答