我试图从java运行一个sed
命令没有成功。这是我的Java代码:sed命令不能从java工作
String[] cmd = {"sed", "-i", "'"+lineIndex+"s/"+line+"/"+currentBid+"/g'", "/data/jsp/items.xml"};
Runtime.getRuntime().exec(cmd);
我也试过:
String[] cmd = {"/bin/sh","-c","sed", "-i", "'"+lineIndex+"s/"+line+"/"+currentBid+"/g'", "/data/jsp/items.xml"};
Runtime.getRuntime().exec(cmd);
事情是,如果我打印出cmd String
的内容和它的工作终端上运行它。这只是因为某种原因从java执行它。当我直接从终端运行该命令时,文件“items.xml”发生变化,使得这更清楚。当我从java运行它时,文件不会改变。我已经验证下面播放的命令是正确的。
我错过了什么吗?
从CMD的输出是sed -i '21s/2/102/g' /data/jsp/items.xml
**编辑
我提出基于以下意见如下变化。然而,输出没有变化。
String[] cmd = {"/bin/sh","-c","sed", "-i", "'"+lineIndex+"s/"+line+"/"+currentBid+"/g'", "/data/jsp/items.xml"};
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line2 = reader.readLine();
while (line2 != null) {
line2 = reader.readLine();
}
reader.close();
好像它会更好,对我来说,到流的XML中Java并执行搜索并以Java替换,而不是从外部shell执行'sed' – Kirby