java - java 的 sed 给出错误

标签 java sed exec

我正在尝试使用 sed 用换行符替换文件中的空格。这是需要自动化的测试套件的一部分,测试套件所需的工具之一将空格分隔的列表输出到文件,需要以换行符分隔。

我正在运行的代码如下所示:

  exec = String.format("sed -i 's/ /\\n/g\' %s", filename);
  Process p1 = run.exec(exec);
  results = getOutput(p1.getErrorStream());
  p.waitFor();

文件保持不变,结果包含以下内容:“sed:-e表达式#1,字符1:未知命令:''“`

exec 的值为:sed -i 's//\n/g'/absolute/path/to/file.out 如果我从命令行运行命令,它作品。

有什么想法可能导致这种情况吗?

谢谢

最佳答案

将前两行替换为:

Process p1 = run.exec(new String[]{"sed", "-i", "s/ /\\n/g", filename});

这里发生了什么:您正在尝试调用 Runtime.exec() 的单参数版本。这不会像“真正的”shell 那样将您的命令字符串解析为支持单引号或双引号字符串的参数 - 相反,它只是在空格上分割:

[T]he command string is broken into tokens using a StringTokenizer created by the call new StringTokenizer(command) with no further modification of the character categories. (Source)

为了获得您期望的行为,您需要自己将命令行分解为参数,并将它们作为数组传递。

关于java - java 的 sed 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202626/

相关文章:

php - : mysql: command not found PHP exec() macOS

java - 您如何确定 .sqlite 或 .sqback 在 Java 中是否损坏?

java - 在 Java 中,如何创建一个重用 Git 存储库的线程安全应用程序?

java - 如何设置glassfish-resource.xml 和web.xml?

linux - 目录名称 - 去除空格和其他格式

sed - 正则表达式 - 可以替换匹配组的一部分吗?

linux - 仅当输出发生变化时才从控制台提取信息

c - execvp() 和/或 strings 出现问题,为什么此代码不起作用?

可以将空字符传递给字符串中间的 argv 吗?

java - 将一个 ImageView 放置在另一个 ImageView 的特定坐标处