向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

sh/bash/dash/ksh/zsh等Shell脚本
Rock_Lee
帖子: 6
注册时间: 2011-09-01 16:05

向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#1

帖子 Rock_Lee » 2011-09-01 16:09

用Shell脚本,删除C源代码中的/*...*/注释,要注意以下这种情况:

/*
...
.../*.....
......*/..\*...
...
*/
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

Re: 向高手请教个问题,如何用shell脚删掉C语言中的注释部分?

#2

帖子 ChenFengyuan » 2011-09-01 16:50

用gcc -E好了..... :em06
sk1418
帖子: 229
注册时间: 2007-07-01 17:36
系统: (En):System
来自: (En):address
联系:

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#3

帖子 sk1418 » 2011-09-01 16:55

说下思路吧,以前写过,懒得写了,你看看符合你的情况不。

先把所有的 /* 替换成 /*\n
然后 */换成 *//n

再逐行扫描,碰到一个/*, 就设个变量标记比如说叫a=1,从这以后所有行都写到一个变量,比如b里,碰到了*/就把a再重置成0,这样b就是这段注释了。以此类推。

至于你是只要注释还是不要注释,就在print上判断不同而已。

实现awk省事点,sed亦可。
---
regards,

Kent
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#4

帖子 fnan » 2011-09-02 2:10

cat 2.c
#include <stdio.h>

main()
{
long l=0;

/*...*/ printf("%ld\n",++l);/*...*/
/*...
printf("%ld\n",++l);
/*...
printf("%ld\n",++l);
printf("%ld\n",++l);
...*/ printf("%ld\n",++l);
}

awk 'BEGIN{RS="\034"} {gsub("\*\/","\034");gsub(/\/\*[^\034]*\034/,"");print}' 2.c
#include <stdio.h>

main()
{
long l=0;

printf("%ld\n",++l);
printf("%ld\n",++l);
}
#这效果吗?一句就好。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
Rock_Lee
帖子: 6
注册时间: 2011-09-01 16:05

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#5

帖子 Rock_Lee » 2011-09-02 12:43

回复4楼:

是的。
Rock_Lee
帖子: 6
注册时间: 2011-09-01 16:05

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#6

帖子 Rock_Lee » 2011-09-02 12:53

3楼的思路领会了,只是怎样把要删除的部分写入变量这一部不会写,能否给段代码呀,小弟在此先说声谢谢了!
Rock_Lee
帖子: 6
注册时间: 2011-09-01 16:05

Re: 向高手请教个问题,如何用shell脚删掉C语言中的注释部分?

#7

帖子 Rock_Lee » 2011-09-02 12:56

ChenFengyuan 写了:用gcc -E好了..... :em06
要用shell啊,大哥!!
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#8

帖子 fnan » 2011-09-02 20:21

Rock_Lee 写了:回复4楼:

是的。
awk -F"\033" -v RS="\034" '{gsub("\*\/","\034");gsub(/\/\*[^\034]*\034/,"");print}' 2.c #实用的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#9

帖子 eexpress » 2011-09-02 20:47

sed一样。先把换行替换成某特殊字符。然后一堆一堆的去掉,再恢复回车。
干嘛要shell
● 鸣学
头像
我就是我2
帖子: 1215
注册时间: 2008-12-13 10:55
来自: the Earth
联系:

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#10

帖子 我就是我2 » 2011-09-02 21:01

eexpress 写了:sed一样。先把换行替换成某特殊字符。然后一堆一堆的去掉,再恢复回车。
干嘛要shell
不知道ee说的shell是什么.查了wiki还是搞不懂.
CLI... :em20
苏东坡问佛印道:“人人皆念观世音菩萨,观世音菩萨念谁?”
佛印答道:“念观世音菩萨。”
苏东坡诧异:“为何亦念观世音菩萨?”
曰:“求人不如求己。”


dropbox 誰好奇,誰來點
勞碌一生又如何,虛度一生又如何,你過得開心嗎?人活著就要開心嘛!
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#11

帖子 eexpress » 2011-09-02 21:13

10楼看7楼,lz的要求。
其实用perl多简单。
:em04
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#12

帖子 fnan » 2011-09-02 21:14

不用替换换行的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#13

帖子 eexpress » 2011-09-02 21:18

当然可以不改换行。只是缺省换行标志,如果改了,忘记恢复,就惨了。
● 鸣学
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#14

帖子 fnan » 2011-09-02 21:59

无视换行的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 向高手请教个问题,如何用shell脚本删掉C语言中的注释部分?

#15

帖子 fnan » 2011-09-02 22:04

话说极端复杂的条件下,perl真有极大优势,一句两句的,那样都无所谓的。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
回复