+ -
当前位置:首页 → 问答吧 → 代码中的重提取

代码中的重提取

时间:2011-07-04

来源:互联网

代码中的宏
MACRO("str", cond, action)
是这样定义的,

代码中,大部分还是在同一行的
但是如果出现这样一种
MACRO(
           "str",
           cond,
           action
           );

这样就不好处理了,
现在的需求是要提取出下面这种形式:
filename;linenumber;MACRO;str

我可以使用grep -A 把剩下的几行打印出来,但是如果在多行,怎么才能使用awk把两行连接在一起呢?

谢谢

作者: alexandnpu   发布时间: 2011-07-04

回复 alexandnpu
  1. echo 'MACRO("str", cond, action)
  2. MACRO(
  3.            "str",
  4.            cond,
  5.            action
  6.            );' |sed -nr '/MACRO\(/{:a;/\)/bb;$!N;ba;:b;/\)/{s/\n//g;s/\s+//g;p;d}}'
  7. MACRO("str",cond,action)
  8. MACRO("str",cond,action);
复制代码
这个代码可以把多行变一行,方便你下一步处理

作者: yinyuemi   发布时间: 2011-07-04

use strict;
use warnings;
while ( my $line = <DATA> ) {
        chomp $line;
        if ( $line =~ m#MACRO\(# .. $line=~m#\);# ) {
                print "$line\n";
        }
}
__DATA__
MACRO(
           "str",
           cond,
           action
           );
abcdef
hijk
MACRO(
           "str",
           cond,
           action
           );
输出
MACRO(
           "str",
           cond,
           action
           );
MACRO(
           "str",
           cond,
           action
           );

作者: magnet2008   发布时间: 2011-07-04