【发布时间】:2013-11-27 02:13:51
【问题描述】:
我正在尝试从 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
** 编辑
我根据下面的 cmets 进行了以下更改。但是输出没有变化。
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();
【问题讨论】:
-
对我来说,在 Java 中流式传输 XML 并在 Java 中进行搜索和替换而不是从外部 shell 执行
sed似乎会更好