Kamil Krzemiński

Kamil Krzemiński Test Engineer, Rule
Financial, Łódź

Temat: exec sed in java

Witam,
mam problem z wykonaniem polecenia programu sed z poziomu Javy na Debianie. Pod windowsem to śmiga. pomocy!!

public class Main{
public static void main(String[] arg){
try{
Process p = Runtime.getRuntime().exec("sed -n 's/PATTERN//p' /root/txt.txt");
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while((line = in.readLine()) != null){
System.out.println(line);
}
}
catch(IOException e){
System.err.println("Some error");
}
}
}


P.S.
możliwe literówki w kodzieKamil Krzemiński edytował(a) ten post dnia 04.06.10 o godzinie 15:43
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: exec sed in java

e.printStackTrace();
Kamil Krzemiński

Kamil Krzemiński Test Engineer, Rule
Financial, Łódź

Temat: exec sed in java

to nie sypie żadnym błędem, tylko zawsze zwraca null'a;/
jak podam mu polecenie echo kot, wypisze mi tego zakichanego kota
Irek Słonina

Irek Słonina programowanie, bazy
danych i linuksy

Temat: exec sed in java

Aby zapewnić walor edukacyjny nie ma rozwiązania na tacy...

Musisz przeczytać errout, masz błędy w składni seda.
p.getErrorStream() i wypisujesz go sobie tak samo jak po getInputStream().
Dodatkowo pomocne jest p.exitValue() - jeśli jest != 0 to komenda zwróciła błąd.
Kamil Krzemiński

Kamil Krzemiński Test Engineer, Rule
Financial, Łódź

Temat: exec sed in java

no oki, trochę mi się wyjaśniło ;)
tylko czemu, gdy wykonuje polecenie sed'a z powłoki można korzystać z nawiasów "" lub '' a gdy chce wywołać polecenie z poziomu javy to idzie tylko bez tych nawiasów?

EDIT:
ba, dziwne jest to, że pod Windowsem wszystko działa bez problemu, tylko linux ma z tym problemy;/

EDIT2:
w takim przypadku pojawia się problem już przy przykładach, gdy któreś z wyrażeń sed'a posiada spacje:
sed s/ala ma kota/ala ma psa/
tutaj już sobie nie radzi;/
trzeba czymś otoczyć całe polecenie sed'a, ale wtedy pluje że nie rozpoznaje znaku ' lub "
Czy ktoś ma jakiś pomysł?

EDIT3:
dobra, sytuacja opanowana, gdy podamy każdy argument jako osobny element tablicy string, to system "kuma co z tym zrobić"
tzn:

String[] command = new String[]{"sed", "s/ala ma kota/ala ma psa/", "/root/txt.txt"};
Proces p = Runtime.getRuntime().exec(command);


Dzięki wielkie Irek za nakierowanie ;) i pokazanie pomocnego kawałka Javy :)Kamil Krzemiński edytował(a) ten post dnia 04.06.10 o godzinie 20:54
Aleksander Lech

Aleksander Lech Architekt rozwiązań

Temat: exec sed in java

Heh, miałem kiedyś identyczny problem i zastosowałem identyczne rozwiązanie. Jest to zgłoszone jako bug. Więcej info na: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=410...

Następna dyskusja:

Programista JAVA pilnie pos...




Wyślij zaproszenie do