sed 命令在 Java 代码中的 Centos 上不起作用

sed 命令在 Java 代码中的 Centos 上不起作用

我正在运行一个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 或任何其他语言调用外部工具似乎有点笨拙。我想您可以直接从语言内部进行这些类型的修改,可能通过使用一些库。

相关内容