Как сгладить # включить пути в нескольких файлах

#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 строка и имя файла записываются из пути и выводятся с помощью обратной ссылки.