我正在尝试使用 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 callnew StringTokenizer(command)
with no further modification of the character categories. (Source)
为了获得您期望的行为,您需要自己将命令行分解为参数,并将它们作为数组传递。
关于java - java 的 sed 给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20202626/