如何在多个文件中展平#include路径

时间:2016-09-30 19:24:25

标签: c++ shell replace sed find

我正在开发一个在子文件夹中有多个库的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 个答案:

答案 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字符串和文件名。