我正在运行一个java代码,它sed
在一个.txt
文件上运行一个命令来删除Centos上的BOM。我收到以下错误:
sed: -e expression #1, char 1: unknown command: `''
Java代码:
String[] args = {"sed","-i","'1s/^\\xEF\\xBB\\xBF//'","/tmp/output.txt"};
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process p = processBuilder.start();
int exitVal = p.waitFor();
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
String line = null;
// read the output from the command
while ((line = stdInput.readLine()) != null) {
output.append(line + "\n");
}
// read any errors from the attempted command
logger.info("Here is the standard error of the command (if any):\n");
while ((line = stdError.readLine()) != null) {
logger.info("Error: " + line);
}
答案1
错误消息表明sed
不知道命令'
(单引号,表达式中的第一个字符)是什么。
删除表达式周围的单引号sed
。您可能在 shell 中需要它来保护字符串不被 shell 解释,但是当sed
从另一种语言调用时,您将不需要它们。
此外,从 Java 或任何其他语言调用外部工具似乎有点笨拙。我想您可以直接从语言内部进行这些类型的修改,可能通过使用一些库。