当前位置: 首页 > 面试题库 >

sed命令无法从Java运行

吴开宇
2023-03-14
问题内容

我试图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());


 类似资料:
  • 我在从命令行运行一个java程序时遇到了严重的麻烦。我觉得我已经接近弄清楚哪里出了问题,但我只是不知所措,我需要帮助。 我正在尝试用以下命令运行一个简单的Hello World程序(在windows上的VSCode中,使用bash terminal): 这根本不起作用,但是,写入文件的完整路径确实起作用,所以像这样的东西是起作用的。 此外,使用F5运行文件也可以正常工作。我希望用命令行参数运行我的

  • - 轻量级流编辑器,一般用来处理文本类文件 sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上 用 sed -i 会实际写入,下面为了演示,都没加该参数,有需要可以自行添加。 基础例子 有一个文件:/opt/log4j2.properties status = error

  • myStr是上面我要执行的整个命令吗? 我已经尝试过的事情: 给了我一个错误: 它运行起来像一个魅力,但不是通过runtime.exec()。

  • 线程“main”java.io.ioException中出现异常:无法运行程序“java” 但是当我从终端上运行任何java命令时,它们都工作得很好。 我发现的另一件事是,当我在终端中运行命令:并使用ProcessBuilder()时,它们会显示不同的输出。即ProcessBuilder命令中不显示jdk/bin的路径。 我如何解决这个问题?

  • 问题内容: 我在file.txt中有以下数据: 我想将字符串替换为“-”之后的字符串,最多替换为“;” 只需加上“;”,就可以得到: 我尝试使用以下命令: 但这给了我以下错误: sed命令出现乱码 为什么会这样呢? 问题答案: 这应该工作:

  • 问题内容: 我在一个应用程序上工作,但有一个关于从Java应用程序运行shell命令的问题。这是代码: 但是当我尝试执行命令时: myapp读取 为两个单独的参数。但是我只想读取一个参数。 当我直接从终端运行此命令时,它执行成功。 我试过,, 但对我没有工作。我如何才能将此参数作为一个参数读取。 问题答案: 我记得exec方法的重载分别为参数提供了一个参数。你需要用那个 对。就这个 只需将命令行和