2013-04-10 129 views
0

我有許多包含一個#include「my.hpp」我想把它移到每個文件成爲最後的包括這樣的.cpp和.HPP文件:我該如何重新排列C頭文件中的包含?

電流:

#include "my.hpp" 
#include "foo.hpp" 
#include "bar.hpp" 

#include "whatever.hpp" 
#include "my.hpp" 
#include "bar.hpp" 

需要:

#include "whatever.hpp" 
#include "something.hpp" 
#include "my.hpp" 

謝謝!

回答

2

你去那裏與發現和Perl:

find . -name "*.?pp" -exec perl -0777 -pi -e 's/(#include "my.hpp"\n)((#include .*\n)*)/$2$1/g' {} \; 

E:忘了補充-0777(啓用多行)

0

我沒有制定出一個完整的腳本的時候,但這裏的一個想法:

  1. 運行grep找到只包含#include "my.hpp"的文件,並只對這些文件運行下面的階段
  2. 切問題包括線路使用類似sed 's/#include "my.hpp"'//
  3. 找到最後一個包括線路使用tacsed並向其追加的包括線路 - 詳情請參見this question and accepted answer。我猜是這樣

    tac | sed 's/^\(#include .*\)$/\1\n#include "my.hpp"/q' | tac

細節可能取決於你的具體文件,因此因人而異。

0

這可能會爲你工作(GNU SED):

sed -rsi '/^#include\b/!b;:a;/#include\b[^\n]*$/{$bb;N;ba};:b;s/(#include my.hpp"\n)(.*)(#include\b[^\n]*\n)/\3\2\1/' file1 file2 filen 

這假設#includes是連續的,不是文件中的最後一個條目。