Java-библиотека для обработки текста / строк, аналогичная утилитам unix / linux - PullRequest
7 голосов
/ 13 июля 2011

Я программист Java. Я часто использую bash-скрипты для обработки текста.

Утилиты, такие как grep, sed, awk, tr, wc, find, а также передача команд между командами дают такую ​​мощную комбинацию.

Однако bash-программированию не хватает переносимости, тестируемости и более элегантных конструкций программирования, существующих в Java. Это также затрудняет интеграцию в другие наши продукты Java.

Мне было интересно, знает ли кто-нибудь какие-либо библиотеки обработки текста Java, которые могли бы предложить то, что я ищу.

Было бы здорово написать:

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

Это может быть "пирог в небе". Но думал, что я все равно поставлю этот вопрос.

Ответы [ 2 ]

3 голосов
/ 27 июня 2013

Unix4j реализует некоторые базовые команды Unix, в основном фокусируясь на обработке текста (с поддержкой передачи между командами): http://www.unix4j.org

Пример (пример Бена, но без awk, поскольку это в настоящее время не поддерживается):

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

Примечание:

  • автор вопроса участвует в проекте unix4j
2 голосов
/ 13 июля 2011

Верьте или нет, но я использовал встроенный Ant для многих из этих задач.


Обновление

Ant имеет API Java, которые позволяют вызывать его из проектов Java. Это встроенный режим. Это ссылка на и Api 1.6.1 . Распространение также должно включать документы.

Чтобы использовать его, вы должны создать новый объект задачи, установить соответствующие параметры и выполнить его так же, как в build.xml, но через Java Api. Чем вы можете запустить свою задачу.

Что-то вроде

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

Возможно, вам придется настроить и другие вещи.

Не уверен, решит ли это вашу проблему, но у Антона есть много кода, чтобы что-то делать. Просто ищите в документах.

...