java中的grep命令

时间:2016-12-19 10:17:45

标签: java grep

我被grep命令困住了。我想用grep来查找java中文件中的特定字符串。

编译程序。但它不会返回包含单词navneet的行,只是打印完成。

我已尝试过以下代码:

import java.io.*;
import java.io.BufferedReader;
import java.io.IOException;

public class Main {
  public static void main (String[] args)throws IOException{
    Runtime rt = Runtime.getRuntime();
    String[] cmd = {"C:\\Program Files (x86)\\Git\\bin\\grep.exe","grep Navneet","C:\\Program Files (x86)\\Git\\bin\\gitconfig"} ;
    Process proc = rt.exec(cmd);    
    BufferedReader is = new BufferedReader(newInputStreamReader(proc.getInputStream())); 
    String line;
    while ((line = is.readLine()) != null) {
      System.out.println(line);
    }
    System.out.println("Done");
  }
}

3 个答案:

答案 0 :(得分:2)

在cmd(windows)中 产出如下:

命令:C:\ Program Files(x86)\ Git \ bin> grep“abc”C:\ Users \ Admin.gitconfig

输出:电子邮件:abc.kumar @ yahoo.com          姓名:abc.kumar

在java中:

      import java.io.*;
      import java.io.BufferedReader;
      import java.io.IOException;

     public class Main {
            public static void main (String[] args)throws IOException{
            Runtime rt = Runtime.getRuntime();
            String[] cmd = { "C:\\Program Files (x86)\\Git\\bin\\grep.exe", "@", "C:\\Users\\Admin\\.gitconfig"}; 
            Process proc = rt.exec(cmd);    
            BufferedReader is = new BufferedReader(new InputStreamReader(proc.getInputStream())); 
            String line;
                   while ((line = is.readLine()) != null) {
                         System.out.println(line);
                       }
            System.out.println("Done");
           } 
          }

输出:

        email = navneet.kumar@wct-inc.com
        Done

答案 1 :(得分:1)

传递给/* code untested */ double x; char *end char qihjuq[] = "a s d a s d g g 1 2 3 1 2 3 5 5.4 d 10.4"; char *p = qihjuq; while (*p) { errno = 0; x = strtod(p, &end); if (errno) { p += 1; } else { printf("found %f\n", x); p = end; } } 的数组中的第一个String应该是命令的完整路径;所有其他字符串都应该是参数。

所以如果你使用

@Embeddable
public class IDsFromA implements Serializable {

    @ManyToOne
    @JoinColumn(name="cID")
    private C c;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="b_1", referencedColumnName="b_1"),
        @JoinColumn(name="b_2", referencedColumnName="b_2")
    })
    private B b;
}

@Embeddable
public class IDsFromB implements Serializable {

    private int b_1;
    private int b_2;
}

@Entity
public class A {

    @EmbeddedId
    private IDsFromA idsFromA;

    // ...
}

@Entity
public class B {

    @EmbeddedId
    private IDsFromA idsFromA;

    // ...
}

@Entity
public class c {

    @Id
    private int cID;

    // ...
}

您正在使用参数Runtime.getRuntime().exec() String[] cmd = {"C:\\Program Files (x86)\\Git\\bin\\grep.exe", "grep Navneet","C:\\Users\\Admin\\type.gitconfig"} ; 调用grep,这意味着它将在该文件中搜索它找不到的字符串grep Navneet。你想用

C:\\Users\\Admin\\type.gitconfig

代替;或者,如果您想同时找到grep Navneet String[] cmd = {"C:\\Program Files (x86)\\Git\\bin\\grep.exe", "Navneet","C:\\Users\\Admin\\type.gitconfig"} ;

Navneet

答案 2 :(得分:0)

当您在String数组的第一个cmd中指定要运行的命令(带完整路径)时,请不要在下一个String中再次提及其名称。数组的第二个元素(索引1)应该只是"Navneet""navneet"。这是另一回事,您应该决定使用大写还是小写n,这对您使用的内容很重要。