我正在开发一个在子文件夹中有多个库的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”?
答案 0 :(得分:1)
试试这个:
find $(_CLOUD_SRC_FOLDER) -type f \( -iname \*.cpp -o -iname \*.h -o -iname \*.hpp \) -maxdepth 3 -exec sed -i.bak 's/\(#include "\)[^"]*\/\([^"]*"\)/\1\2/' {} +
使用反向引用从路径和输出中捕获 #include
字符串和文件名。