首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文件中删除第一个多行注释

问从文件中删除第一个多行注释
EN

Stack Overflow用户
提问于 2016-01-23 19:53:54
回答 3查看 434关注 0票数 2

我试图使用unix工具从源文件的大目录中删除所有初始的多行注释。

例如,我有一个文件testfile.c

代码语言:javascript
复制
/* 
   testfile.c
   get rid of me
*/

int main(int argc, const char *argv[]) {
/* 
   keep me
*/
    return 0;
}


/* 
   keep me
*/

我试过像这样使用sed:

代码语言:javascript
复制
sed '/\/\*/,/\*\//d' testfile.c

但是,这删除了所有多行评论,结果是:

代码语言:javascript
复制
int main(int argc, const char *argv[]) {
    return 0;
}

是否有办法做到这一点,并只删除多行注释,如果它从文件的第一行开始,并保持所有其他评论的机智?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-23 20:05:05

这假设在第一个多行注释之前文件中没有任何内容。它只是说,在您看到结束第一个注释的*/之后开始打印(不管看到了什么,都不要再停止)。

代码语言:javascript
复制
$ awk '!f&&/\*\//{f=1;next}f' testfile.c 

int main(int argc, const char *argv[]) {
/*
   keep me
*/
    return 0;
}


/*
   keep me
*/

解释:

代码语言:javascript
复制
!f && /\*\// { f=1; next }

如果没有设置标志f (也就是说,如果f等于0,程序开始时是这样),并且当前行包含模式*/ (两个字符都需要用\进行转义),那么将标志设置为1,然后立即转到下一行(没有打印)。

代码语言:javascript
复制
f

如果标志f设置为1,则打印当前行(回想一下,只有当next语句未执行时,我们才到达这里,从而避免打印初始注释的最后一行)。

票数 4
EN

Stack Overflow用户

发布于 2016-01-23 20:05:55

如果您的评论都以相同的方式结束,请尝试如下

代码语言:javascript
复制
awk 'BEGIN {while($1 != "*/") getline}{print}'

否则,你将不得不做一些更花哨的事情,看看一行的最后两个字符,直到你找到第一个评论的结尾。

它的特点是在完成任务后不测试任何行。

票数 0
EN

Stack Overflow用户

发布于 2016-01-25 11:46:20

代码语言:javascript
复制
sed '/\/\*/,/\*\// s/.*//g' filename | awk '!/^$/'
  1. 按模式范围进行匹配,然后以零代替。
  2. 移除空线

输出:

int (int,const *argv[]) {返回0;}

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34968109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档