#c #shell #replace #sed #find
#c #оболочка #заменить #sed #Найти
Вопрос:
Я работаю над проектом на C с несколькими библиотеками во вложенных папках. Облачная среда IDE, которую я использую, требует, чтобы все файлы находились в одной папке, чтобы использовать функции перепрошивки в облаке. Теперь у меня есть 2 сценария. Тот, который сглаживает структуру каталогов, и тот, который сглаживает включения в соответствии с новым макетом. До сих пор я добавлял следующее в сценарий, который я использую для замены абсолютного пути включений:
find $(_CLOUD_SRC_FOLDER) -type f ( -iname *.cpp -o -iname *.hpp ) -maxdepth 3 -exec sed -i.bak 's/#include "../lib//#include "/g' {}
Приведенная выше строка работает только для #include "../lib/filename.hpp"
. Как я могу переформатировать это, чтобы соответствовать #include "any/path/filename.hpp"
и заменить на #include «filename.hpp»?
Ответ №1:
Попробуйте это:
find $(_CLOUD_SRC_FOLDER) -type f ( -iname *.cpp -o -iname *.h -o -iname *.hpp ) -maxdepth 3 -exec sed -i.bak 's/(#include ")[^"]*/([^"]*")/12/' {}
#include
строка и имя файла записываются из пути и выводятся с помощью обратной ссылки.