fnan 写了:sed检察类似#include "xxxx"的行,将文件xxxx的名提取出来,利用文件名动态创建读取内容的sed指令,写入一个临时文件,然后sed -f 运行临时文件,加入文件内容后,再用sed删除所有类似#include "xxxx"的行。
突然想到头文件里也有#include,此法不行,修改了思路,测试通过:
kose3@kose3-desktop:~$ cat c.c
# include "stdio.h"
# include "time.h"
main()
...
kose3@kose3-desktop:~$ sed -i -e 's|^\s*#\s*include\s*"\(.*\)"\s*$|/seddeletesed.\1/r /usr/include/\1|w tmp.sed' -e 's|\(/seddeletesed.*/\)r /usr/include/.*|\1|' c.c;sed -i -f tmp.sed c.c;sed -i '/^\/seddeletesed.*h\/$/d' c.c
kose3@kose3-desktop:~$ grep '/seddelete.*/' c.c
kose3@kose3-desktop:~$ grep '\s*#\s*include.*' c.c
# include <features.h>
# include <stddef.h>
# include <bits/types.h>
#include <libio.h>
# include <stdarg.h>
#include <bits/stdio_lim.h>
#include <bits/sys_errlist.h>
# include <getopt.h>
# include <bits/stdio.h>
# include <bits/stdio2.h>
# include <bits/stdio-ldbl.h>
# include <features.h>
# include <stddef.h>
# include <bits/time.h>
# include <bits/types.h>
# include <bits/types.h>
# include <bits/types.h>
# include <bits/types.h>
# include <bits/types.h> /* This defines __time_t for us. */
# include <xlocale.h>
kose3@kose3-desktop:~$ cat c.c
..............................
__END_DECLS
#endif /* <time.h> included. */
#endif /* <time.h> not already included. */
main()
...
kose3@kose3-desktop:~$
(不知道那种情况下用什么删除tmp.sed临时文件,没加上)