gpt4 book ai didi

java sed 命令不产生响应

转载 作者:行者123 更新时间:2023-12-02 04:25:15 26 4
gpt4 key购买 nike

当我尝试使用 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,使其成为无效的命令规范。仅在 shell 提示符下才需要引号。
  3. 最后一个参数前面有一个额外的空格,这也可能导致问题。
  4. 使用 -i 调用 sed 命令它就地更改文件,根本不产生任何输出。

所以你可能想要的是

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

关于java sed 命令不产生响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32270956/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com