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