脚本:在许多很多文件中的最后一个#include之后插入一个额外的#include

时间:2012-10-25 07:34:42

标签: c regex bash sed

有一秒钟,我希望能够使用sed的{​​{1}}命令,但是a\(在我手中,无论如何)并不是保持状态的粉丝(在每个#include之后插入。

有没有办法用sed执行此操作?是否有 smart 这样做的方式?

如果可以采用这种方法,我会编写一个常规的Python / Ruby脚本,但这似乎是某个人可能碰到某个地方的问题。

3 个答案:

答案 0 :(得分:3)

在应用sed之前,您可以使用命令tac逐行反转文件,然后让sed执行 insert 而不是追加。当然要确保sed只插入一次。像这样:

tac file | sed '1,/#include/ {/#include/i\
#include whatever
}' | tac

这应该可以解决问题。

答案 1 :(得分:1)

假设您在主程序启动之前没有任何多行注释:

 awk '!f && /^ *[a-zA-Z]/{print "#include<newfile.h>";f=1;}1' file

答案 2 :(得分:1)

这可能适合你(GNU sed):

sed -i ':a;$!{N;ba};s/.*#include[^\n]*/&\n#include <new.h>/' file1 file2 fileN