0

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 tos'`

私はWindowsを使用しており、シェルスクリプトの実行に「cygwin」を使用しています。

これを修正するにはどうすればよいですか。また、一重引用符で囲まれているため、一重引用符をエスケープする必要がありますか?

4

2 に答える 2

0

Igor が述べたように、エスケープ/するには、別の区切り文字を使用できます。

お気に入り

echo //// | sed 's@////@====@'

'しかし、エスケープする必要があるものもたくさんあります。

少なくとも 2 つの方法があります。

最初の1つ:

echo "111'222\"333" | sed 's/1'\''2/___/;s/2"3/__/;'

2番目のもの:

echo "111'222" | sed "s/1'2/___/;s/2\"3/__/;"

の間に何があるかはまったく問題ではないため、'のようにエスケープすることはできません。そこではエスケープ文字が機能しません。したがって、最初にエスケープ文字をエスケープで機能させてから使用する必要があります。したがって、構築を使用します。ただし、エスケープ文字は insedeで正常に機能するため、使用できます。'\''''''\'''"""\""

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 に答える
0

正規表現/に含まれるエスケープ(例: ) または他の区切り文字 (例:の代わり) を使用します。sedgoogle-analytics.com/ga.jss^^^s///

于 2012-07-10T10:10:02.750 に答える