2017-01-17 1 views
0

Я пытаюсь заменить рекурсивно все shabang из папки (для запуска программы в android ..), с sed. Команда хорошо работает, когда я попытался с «нормальным словом», но стать головной болью, когда я пытаюсь с shabang..Everything я пытался, я получил сообщение об ошибке:заменить рекурсивно shabang с sed

  • плохой вариант в выражении замены

  • непревзойденной «/»

  • события не найдено

Я новичок в этом, и это, вероятно, ошибка новичка, так что час прежде чем это код (TSST моя папка):

grep -rl "env python" tsst |xargs sed -i "s/\#!/usr/bin/env python/\#!/system/python2.7.9//g" 

Я также попытался с переменными: (. первая часть кода хорошо .. я просто скопировать, где есть проблема)

sed -i "s/$old/$new/g" 

sed -i 's/"$old"/"$new"/g' 

sed -i "s/'\#!\/usr\/bin\/env python'/'\#!\/system\/python2.7.9\/'/g" 

Что я сделал неправильно?

+0

Вы попробовали 1) используя 'find' вместо' xargs', 2) эту замену на один файл, 3) более простую замену? – Beta

ответ

1

Попробуйте это регулярное выражение. Вы не можете смешивать / как разделитель регулярных выражений и действительные символы, которые вы хотите сопоставить. Вы можете использовать любой символ в качестве разделителя регулярных выражений, например |, если вы используете его вместо / во всех 3 точках.

$ echo '#!/usr/bin/env python' | sed 's|#!/usr/bin/env python|#!/system/python2.7.9|g' 
#!/system/python2.7.9 
+0

Спасибо! Он отлично работает. Я знал, что это была глупая ошибка. Но я не думал об этом, теперь я знаю и понимаю, почему он не работает. – user7427983