2013-11-14 2 views
1

Я пытаюсь заменить текст в файле содержимым переменной $ ourpath, так что путь к каталогу будет заменен.Найти и заменить текст в файле на OSX/bash

sed -e "s/__REPLACE_THIS_PATH__/${ourpath}/" com.plex.plexconnect_daemon.bash.plist > com.plex.plexconnect_daemon.bash.plist 

, но когда я запускаю это, он просто удаляет содержимое файла, или его перезаписи файла нулевой длины.

любые мысли?

+0

Переменные не расширяются внутри одинарных кавычек, только двойные кавычки. Это основной сценарий оболочки. – Barmar

+0

мой плохой, у меня были двойные кавычки в моем оригинальном скрипте. я только что увидел что-то на веб-странице, у которой был сингл, который я пробовал. я забыл изменить назад. вопрос теперь обновляется. спасибо за хэдшоп. но он все равно не работает с двойными кавычками. – user2990773

ответ

2

Вы не можете перенаправить вывод во входной файл. Когда перенаправление происходит, файл обрезается, поэтому читать нечего. Либо записать в другой файл, а затем переименовать его, или использовать опцию -i в СЭД:

sed -i.bak -e "s/__REPLACE_THIS_PATH__/${ourpath}/" com.plex.plexconnect_daemon.bash.plist 

Это добавит суффикс .bak к исходному файлу и поместить результат в новый файл с исходным именем.

+0

Легенда, спасибо за вашу помощь. – user2990773

+0

Могу ли я записать новый файл в другую папку? в этом случае, как это будет выглядеть? мой код ниже не работает 'sed -i -e 's/__ REPLACE_THIS_PATH __/$ {ourpath} /" ./com.plex.plexconnect_daemon.bash.plist> /Library/LaunchDaemons/com.plex.plexconnect_daemon.bash .plist' – user2990773

+0

Если вы используете -i, вам не нужно перенаправление: 'sed -i -e 's/__ REPLACE_THIS_PATH __/$ {ourpath} /"./com.plex.plexconnect_daemon.bash.plist' – rojomoke

Смежные вопросы