sedコマンドはJavaコードのCentosでは機能しません。

sedコマンドはJavaコードのCentosでは機能しません。

CentosからBOMを削除するためにファイルsedにコマンドを実行するJavaコードを実行しています。.txt次のエラーが発生します。

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。文字列がシェルから解釈されるのを防ぐために、シェルでこれが必要になる場合がありますが、sed他の言語で呼び出す場合は必要ありません。

また、Javaや他の言語から外部ツールを呼び出すのは少しぎこちないようです。おそらく、いくつかのライブラリを使用して、言語内で直接このタイプの変更を実行できると思います。

関連情報