2011-07-13 3 views
6

Jestem programistą java. Często używam skryptów Bash do przetwarzania tekstu.Biblioteka Java do przetwarzania tekstów/ciągów symularnie do narzędzi unix/linux

Narzędzia takie jak grep, sed, awk, tr, wc, find oraz piping between commands dają tak potężną kombinację.

Jednak programowanie bash nie ma możliwości przenoszenia, testowalności i bardziej eleganckich konstrukcji programistycznych istniejących w Javie. Utrudnia to również integrację z innymi naszymi produktami Java.

Zastanawiam się, czy ktoś wie o jakichkolwiek bibliotekach przetwarzania tekstu Java, które mogą oferować to, czego szukam.

Byłoby tak fajnie być w stanie napisać:

Text.createFromFile("blah.txt).grep("-v","ERROR.*").sed("s/ERROR/blah/g").awk("print $1").writeTo("output.txt") 

To może być pie-in-in-the-sky rzeczy. Ale pomyślałem, że i tak postawię to pytanie.

Odpowiedz

2

Unix4j realizuje polecenia pewne podstawowe UNIX, skupiając się głównie na tekst przetwarzania (wsparcie dla przewodów między poleceniami): http://www.unix4j.org

przykładzie (np Ben, ale bez AWK nie jest obecnie obsługiwana)

Unix4j.fromStrings("1:here is no error", "2:ERRORS everywhere", "3:another ERROR", "4:nothing").toFile("blah.txt"); 
Unix4j.fromFile("blah.txt").grep(Grep.Options.v, "ERROR.*").sed("s/ERROR/blah/g").toFile("output.txt");  
Unix4j.fromFile("output.txt").toStdOut();  

>>> 
1:here is no error 
4:nothing 

Uwaga:

  • autor pytania jest zaangażowany w projekt unix4j
2

Wierzcie lub nie, ale użyłem wbudowanego Mrówka dla wielu z tych zadań.


Aktualizacja

Ant ma Java API, które pozwalają jej być wywoływane z projektów Java. To jest tryb wbudowany. Jest to odniesienie do And Api 1.6.1. Dystrybucja powinna również obejmować dokumenty.

Aby z niego skorzystać, należy utworzyć nowy obiekt zadania, ustawić odpowiednie parametry i wykonać je tak samo, jak w pliku build.xml, ale za pomocą aplikacji Java Api. Następnie możesz uruchomić swoje zadanie.

Coś

ReplaceRegExp regexp = new ReplaceRegExp(); 
regexp.setMatch("bla"); 
regexp.setFile(new File("inputFile")); 
regexp.execute(); 

może trzeba skonfigurować kilka innych rzeczy, jak również.

Nie jestem pewien, czy to rozwiązuje twój problem, ale Ant ma dużo kodu do robienia rzeczy. Wystarczy przeszukać dokumenty.

+0

Witam Alex, czy mógłbyś wyjaśnić, co masz na myśli mówiąc o wbudowanej mrówce? Pozdrawiam, B – Ben

+0

Witaj Ben, zaktualizowałem swoją odpowiedź. Powodzenia! –

+0

Cześć Alex. Dzięki, to bardzo dobrze wiedzieć. – Ben