免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2692 | 回复: 17

请问,匹配剩下的模式怎么写(awk)(已解决,谢谢大家) [复制链接]

论坛徽章:
0
发表于 2009-05-14 00:59 |显示全部楼层
我想抽取"/*" ,"*/"之间的内容,匹配
“/*”   { }
“*/”    { }
后,要匹配剩下的模式,应该怎么写
谢谢

[ 本帖最后由 heixia108 于 2009-5-14 22:40 编辑 ]

论坛徽章:
0
发表于 2009-05-14 01:02 |显示全部楼层

回复 #1 heixia108 的帖子

没看懂

论坛徽章:
0
发表于 2009-05-14 01:05 |显示全部楼层
对于
/*
test
*/
我只想打印test,

我是这样写的
"/*"  {}
"*/"  {}
{ print }

很明显  { print }前需要加一个模式,不知道那个模式怎么写

[ 本帖最后由 heixia108 于 2009-5-14 01:07 编辑 ]

论坛徽章:
0
发表于 2009-05-14 01:33 |显示全部楼层

回复 #3 heixia108 的帖子

[W]awk '/[[:alpha:]]/{print}' 3
test
[W]cat 3
/*
test
*/



[W]cat 2
Filesystem /*  1K-blocks  *\    Used Available Use% Mounted on
[W]awk '{print gensub(/.*\/\*(.*)\*\\.*/,"\\1",g)}' 2
  1K-blocks

论坛徽章:
0
发表于 2009-05-14 02:01 |显示全部楼层
sed:

  1. sed -n '/\/\*/,/\*\//{s#/\*##g;s#\*/##g;p}' URFILE
复制代码


awk:

  1. awk -v RS="[/*]" 'NR%4==3' URFILE
复制代码


*注:都只能处理简单情况,如果出现类似于printf("/*")(两个都不能处理)或者int a=1; /* a=1 */(sed的会出问题)等等情况会有问题。印象中有过一个几个大牛讨论屏蔽//和/* */注释的帖子,可以去找找,反过来就是往外拿了。

论坛徽章:
0
发表于 2009-05-14 02:48 |显示全部楼层
参考了网络资源和资料,这个处理的情况应该更多一些,不过肯定还是不能应对所有情况……


  1. sed 's/#/$$$$/g' URFILE | cpp - | sed '/^#/d;s/$$$$/#/g' | diff - URFILE | sed -nr '/^>/{s/^> //;s#(.*/\*+)?([^*]*)(\*+/)?#\2#g;/^$/d;s/^ +//g;p}'
复制代码

论坛徽章:
0
发表于 2009-05-14 06:56 |显示全部楼层

回复 #1 heixia108 的帖子

是不是打印注释代码?

如果都是这样的情况就比较好处理
/*
test
*/

论坛徽章:
0
发表于 2009-05-14 08:34 |显示全部楼层
谢谢大家。
在写程序时在每个文件开头都写了一个类似
/*
    内容
*/
的对程序作用进行描述的东西,接着的是代码。现在想通过awk把它些内容提取出来,对于后面出现的注释不用理。

我写了个代码

BEGING   { begin = 0; end = 0 }

"/*"    {
                 if( end == 0 )
                      begin = 1
           }
"*/"     {
                 begin = 0
                 end = 1
           }
""(这里应该加个模式吧)    {
                                            if( begin )
                                                    print
                                     }

上面的模式应该怎么写呢

论坛徽章:
0
发表于 2009-05-14 08:44 |显示全部楼层
  1. [root@mip-123456 shell]# cat file
  2. /*
  3. asas
  4. asasdas

  5. aasas
  6. */
  7. [root@mip-123456 shell]# awk '/\/\*/{next;}/\*\//{exit}1' file
  8. asas
  9. asasdas

  10. aasas
复制代码

论坛徽章:
0
发表于 2009-05-14 08:46 |显示全部楼层

回复 #8 heixia108 的帖子

那全部直接打印第二行就可以吧。
如果格式都一样的话
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP