繁体   English   中英

java sed命令不产生响应

[英]java sed command not producing response

当我尝试使用Java执行SED命令时,该命令未执行,但是它已成功手动执行。 在输出中没有响应,也没有错误。

我的SED命令:手动:

sed -i 's/abc/xyz/' /home/tmp.txt

在Java文件中:

String[] cmdtest = {"sed ", "-i","'s/abc/xyz/'"," /home/tmp.txt"};

处理:

StringBuffer output = new StringBuffer();
Process p = null;
try {
    p = Runtime.getRuntime().exec(cmdtest);
    p.waitFor();
    BufferedReader reader =
        new BufferedReader(new InputStreamReader(p.getInputStream()));

    String line = "";
    while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
    }

} catch (Exception e) {
        e.printStackTrace();
}

您首先waitFor该过程结束,然后继续读取其输出。 您必须在进程运行时获取输出; 否则,其输出缓冲区将填满,然后该过程将阻塞,直到耗尽它。 因此,只需删除waitFor ,它将开始工作。

此外,除了这个问题的Java方面,我还看到了如何构造命令行的问题:

{"sed " + "-i","'s/abc/xyz/'"," /home/tmp.txt"}
  1. 第一个元素是"sed -i"显然,您要让-i作为第一个参数,而不是命令名称的一部分。
  2. 您在第二个参数周围有'...' :它将按字sed传递给sed ,从而使其成为无效的命令规范。 仅在shell提示符下需要引号。
  3. 最后一个参数前面有一个多余的空间,这也可能导致问题。
  4. -i调用sed命令命令它就地更改文件,根本不产生任何输出。

所以大概你想要

{"sed", "s/abc/xyz/", "/home/tmp.txt"}

线

 String[] cmdtest = {"sed " + "-i","'s/abc/xyz/'"," /home/tmp.txt"};

有毛病。

  • 您要运行的程序的名称是sed而不是sed-i
  • 您要运行的SED脚本是s/abc/xyz/ ,而不是's/abc/xyz/' (请注意引号)。
  • 您要编辑的文件的路径名是/home/tmp.txt ,而不是/home/tmp.txt (请注意多余的空格)。

尝试这个:

 String[] cmdtest = {"sed", "-i","s/abc/xyz/","/home/tmp.txt"};

raedwald&marko给出了正确的答案。 采用

String[] cmdtest = {"sed", "-i","s/abc/xyz/","/home/tmp.txt"};

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM