如何在Eclipse中使用make / compile / grep的输出?

时间:2015-09-22 18:53:14

标签: eclipse

Eclipse有自己的内置搜索功能,这些功能都很好。这不是我在这里问的问题。

我有一个工具以grep的格式吐出文件位置:

path/to/file1.ext:34: found something
path/to/file2.ext:226: found something else

有些工具甚至会添加第二个数字,即列号。例如。 ack使用--column选项运行。

path/to/file1.ext:34:11: found something
path/to/file2.ext:226:16: found something else

我可以将这样一个列表“放入”eclipse中,这样我就可以点击第一行,然后在第34行第11行打开path/to/file1.ext吗?

我是ackgrep和Perl one-liners的重度用户,因此在使用Eclipse时,我真的很想念该工具链作为附加选项。

(我知道Eclipse中有其他好的可能性。)

1 个答案:

答案 0 :(得分:0)

事实证明,如果打印到ecilpse控制台的行如下所示:

bla bla (File.java:34) bla bla

然后eclipse将其转换为链接并在单击时在第34行打开File.java。完善。它会在类路径中选择第一个File.java(这对我的目的来说很好)。

所以我写了一个简单的main()打开一个包含我所描述的输出的文件(现在硬编码为一个名为ack的文件),并使用正则表达式将其转换为上述格式并打印跑出去的时候。不完美,但是我所追求的95%。

package my.package;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ShowAckGrep {
    public static void main(String[] args) {
        String curDir = System.getProperty("user.dir");
        System.out.println("Current directory is: " + curDir);
        Scanner scanner = null;
        try {
            File file = new File("ack");
            scanner = new Scanner(file);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            return;
        }
        Pattern p = Pattern.compile("(?:.*/)?(\\w*?\\.java):(\\d+):\\s*(.*)");
        while(scanner.hasNextLine()){
            String line = scanner.nextLine();
            // System.out.println("Line: " + line);
            Matcher m = p.matcher(line);
            if (! m.matches()) {
                System.out.println("Ignoring: " + line);
                continue;
            }
            System.out.println(
                "(" + m.group(1) + ":" + m.group(2) + ") " + m.group(3)
            );
        }
        scanner.close();
    }
}