sed命令无法从Java运行

我试图sed从Java 运行命令而没有成功。这是我的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();

回答:

试试看:)

这种解决方案的优点是,您有了临时文件,调试起来更加容易!

String lineIndex="21";

String line="2";

String currentBid="102";

File temp = File.createTempFile("temp-sh", ".sh");

FileWriter fw = new FileWriter(temp);

fw.write("#!/bin/bash\n");

fw.write("sed -i '"+lineIndex+"s/"+line+"/"+currentBid+"/g' data/jsp/items.xml\n");

fw.close();

System.out.println(". "+temp.getAbsolutePath());

Runtime.getRuntime().exec(". "+temp.getAbsolutePath());

以上是 sed命令无法从Java运行 的全部内容, 来源链接: utcz.com/qa/418143.html

回到顶部