[求助]用命令实现一个简单的#include预处理程序

sh/bash/dash/ksh/zsh等Shell脚本
回复
brglng
帖子: 198
注册时间: 2008-02-05 20:26

[求助]用命令实现一个简单的#include预处理程序

#1

帖子 brglng » 2011-07-19 18:17

查找文件中类似#include "xxxx"的行,将这一行删掉,并将文件xxxx的内容插入此处,请问如何实现?
尽量不使用shell本身的功能,而只使用命令程序的功能。
头像
jarlyyn
帖子: 4671
注册时间: 2006-04-12 18:54
联系:

Re: [求助]用命令实现一个简单的#include预处理程序

#2

帖子 jarlyyn » 2011-07-19 18:30

sed/grep提取include的文件名
`cat 文件名`提取到变量

sed s替换
brglng
帖子: 198
注册时间: 2008-02-05 20:26

Re: [求助]用命令实现一个简单的#include预处理程序

#3

帖子 brglng » 2011-07-19 21:46

谢谢楼上!
这样虽然可以实现,但使用变量就用到了shell本身的功能。
因为具体事情的关系,我必须在win下做。而cygwin的bash打开很慢,所以想在cmd下用cygwin里面的那些unix命令来完成,所以不想用到bash和cmd的任何功能,只用命令本身的功能。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [求助]用命令实现一个简单的#include预处理程序

#4

帖子 fnan » 2011-07-20 23:05

sed检察类似#include "xxxx"的行,将文件xxxx的名提取出来,利用文件名动态创建读取内容的sed指令,写入一个临时文件,然后sed -f 运行临时文件,加入文件内容后,再用sed删除所有类似#include "xxxx"的行。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
adam8157
帖子: 2794
注册时间: 2009-03-05 16:31
联系:

Re: [求助]用命令实现一个简单的#include预处理程序

#5

帖子 adam8157 » 2011-07-20 23:44

直接预编译好了
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: [求助]用命令实现一个简单的#include预处理程序

#6

帖子 eexpress » 2011-07-21 9:20

cygwin,也不是不支持shell的特性。
如果那么限定只能使用程序,你可以使用awk脚本。那就只要一个awk,语法有些类似C
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [求助]用命令实现一个简单的#include预处理程序

#7

帖子 fnan » 2011-07-21 19:23

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临时文件,没加上)
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [求助]用命令实现一个简单的#include预处理程序

#8

帖子 fnan » 2011-07-21 19:39

awk也行,不过不能只换需要的行,全篇重写。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
lexdene
帖子: 434
注册时间: 2010-02-21 16:19
来自: 大连
联系:

Re: [求助]用命令实现一个简单的#include预处理程序

#9

帖子 lexdene » 2011-07-22 9:07

这个很难。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: [求助]用命令实现一个简单的#include预处理程序

#10

帖子 fnan » 2011-07-23 1:44

lexdene 写了:这个很难。
awk不难啊。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
cjxgm
帖子: 1952
注册时间: 2010-04-23 20:40
系统: Arch Linux
来自: 浙江·杭州
联系:

Re: [求助]用命令实现一个简单的#include预处理程序

#11

帖子 cjxgm » 2011-07-23 12:58

代码: 全选

cpp a.c
:em06
Clanjor Prods. | Develop for Developers. (C++, Lua) | 作曲编曲 | 实时渲染引擎
tusooa
帖子: 6548
注册时间: 2008-10-31 22:12
系统: 践兔
联系:

Re: [求助]用命令实现一个简单的#include预处理程序

#12

帖子 tusooa » 2011-07-23 14:08

cjxgm 写了:

代码: 全选

cpp a.c
:em06
就是,用cpp就行.

代码: 全选

] ls -ld //
brglng
帖子: 198
注册时间: 2008-02-05 20:26

Re: [求助]用命令实现一个简单的#include预处理程序

#13

帖子 brglng » 2011-07-27 12:49

我的意思当然不是用cpp。。。

楼上的解答都好厉害,感谢大家啊~
嗯,我还要继续好好学习shell~
回复