[英]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"}
"sed -i"
显然,您要让-i
作为第一个参数,而不是命令名称的一部分。 '...'
:它将按字sed
传递给sed
,从而使其成为无效的命令规范。 仅在shell提示符下需要引号。 -i
调用sed
命令命令它就地更改文件,根本不产生任何输出。 所以大概你想要
{"sed", "s/abc/xyz/", "/home/tmp.txt"}
线
String[] cmdtest = {"sed " + "-i","'s/abc/xyz/'"," /home/tmp.txt"};
有毛病。
sed
而不是sed-i
。 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.