java sed命令没有产生响应
当我试图用Java执行它时,SED命令没有执行,而手动执行成功。没有回应&在输出中看不到错误。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
,使其成为一个无效的命令规范。引号仅在shell提示符处需要。 - 最后一个参数在前面有一个额外的空间,这也可能导致问题。
- 调用
sed
与-i
命令它在原地更改文件,根本不产生任何输出。
所以也许你想,而不是
{"sed", "s/abc/xyz/", "/home/tmp.txt"}
还有一件事,请帮忙。我怎么能在这些命令中使用backslaches将 – user3356868
http://*.com/questions/32274107/sed-need-to-use-in-string-to-append-using-sed – user3356868
线
String[] cmdtest = {"sed " + "-i","'s/abc/xyz/'"," /home/tmp.txt"};
故障。
- 要运行的程序的名称是
sed
而不是sed-i
。 - 您要运行的SED脚本是
s/abc/xyz/
,而不是's/abc/xyz/'
(注意引号)。 - 要编辑的teh文件的路径名是
/home/tmp.txt
,而不是/home/tmp.txt
(请注意额外的空间)。
试试这个:
String[] cmdtest = {"sed", "-i","s/abc/xyz/","/home/tmp.txt"};
谢谢你的工作,你能告诉我如何使用/也可以在命令中使用。在此先感谢 – user3356868
@ user3356868看来我们已经回答了您的原始问题。如果你有一个单独的问题,[把它作为一个单独的问题](http://meta.stackexchange.com/questions/43478/exit-strategies-for-chameleon-questions)。 – Raedwald
raedwald &马尔科给了正确的答案。使用
String[] cmdtest = {"sed", "-i","s/abc/xyz/","/home/tmp.txt"};
感谢
'sed的-i'不产生任何输出,你有什么期待看到? –