我試圖從java運行一個sed
命令沒有成功。這是我的Java代碼:sed命令不能從java工作
String[] cmd = {"sed", "-i", "'"+lineIndex+"s/"+line+"/"+currentBid+"/g'", "/data/jsp/items.xml"};
Runtime.getRuntime().exec(cmd);
我也試過:
String[] cmd = {"/bin/sh","-c","sed", "-i", "'"+lineIndex+"s/"+line+"/"+currentBid+"/g'", "/data/jsp/items.xml"};
Runtime.getRuntime().exec(cmd);
事情是,如果我打印出cmd String
的內容和它的工作終端上運行它。這只是因爲某種原因從java執行它。當我直接從終端運行該命令時,文件「items.xml」發生變化,使得這更清楚。當我從java運行它時,文件不會改變。我已經驗證下面播放的命令是正確的。
我錯過了什麼嗎?
從CMD的輸出是sed -i '21s/2/102/g' /data/jsp/items.xml
**編輯
我提出基於以下意見如下變化。然而,輸出沒有變化。
String[] cmd = {"/bin/sh","-c","sed", "-i", "'"+lineIndex+"s/"+line+"/"+currentBid+"/g'", "/data/jsp/items.xml"};
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line2 = reader.readLine();
while (line2 != null) {
line2 = reader.readLine();
}
reader.close();
好像它會更好,對我來說,到流的XML中Java並執行搜索並以Java替換,而不是從外部shell執行'sed' – Kirby