Как запустить grep в файлах epub / mobi?

Есть ли способ сделать это, особенно в наборе нескольких файлов epub / mobi в одном каталоге?

Вы можете легко grep эти файлы, предоставив -a возможность интерпретировать файлы как ascii:

 grep -a "author" *.epub *.mobi 

Вышеописанное работает над всеми моими 1000+ файлами EPUB и MOBI, дающими ожидаемые результаты.

EPUB и MOBI являются форматами контейнеров. EPUB – это файл .zip с некоторыми структурными требованиями, MOBI – это файл формата базы данных Palm. Оба формата позволяют вставлять сжатые или несжатые данные в контейнеры.

Если данные, которые вы ищете, находятся в «файле» в контейнере, и этот файл сжимается, вам необходимо предоставить сжатую строку, а не расширенную, несжатую версию строки. В частности, если вы читаете EPUB / MOBI на устройстве чтения электронных книг, вы, конечно, обычно не найдете слово «abcde», которое вы только что прочитали, используя grep -a 'abcde' во всех файлах EPUB и MOBI, так как содержимое книга, вероятно, (но не обязательно, это всего лишь показатель эффективности) в сжатых «файлах» в контейнере.

Это не проблема grep которая неспособна выполнить поиск в этих файлах, но вы не предоставляете правильную строку поиска. То же самое произойдет, если вы прочитаете файл с японским текстом, используя японское программное обеспечение для перевода на английский язык, а затем надеетесь, что вы сможете найти английские слова , скопировав исходный файл. С -a и правильными японскими (двоичными) шаблонами слов grep будет работать нормально.

Формат epub представляет собой сжатый двоичный файл, поэтому перед распаковкой текста необходимо разжать его. Формат MOBI также не является простым текстом, поэтому нет, я бы сказал, что файлы epub и mobi не могут быть grepped, поскольку они не являются текстовыми файлами. Используйте калибр или другой считыватель, который позволяет искать в файлах.

Для поиска сжатого файла вы можете использовать zgrep. Это должно работать для epub, поскольку это сжатый файл. Ниже приведена дополнительная информация о zgrep: http://manpages.ubuntu.com/manpages/oneiric/man1/zgrep.1.html.

Это работало на windows7 + cygwin; поиск текста внутри zip-архивов.

 c:\> zipgrep "regex" file.epub 

сценарий оболочки в c: / cygwin / bin / zipgrep, и это также работает:

 c:\> unzip -p "*.epub" | grep -a --color regex 

-p для трубы.

Скрипт grep-epub.sh

 PAT=${1:?"Usage: grep-epub PAT *.epub files to grep"} shift : ${1:?"Need epub files to grep"} for i in $* ;do echo $0 $i unzip -p $i "*.htm*" "*.xml" "*.opf" | # unzip only html and content files to stdin perl -lpe 's![<][^>]{1,200}?[>]!!g;' | # get rid of small html <b>tags grep -Pinaso ".{0,60}$PAT.{0,60}" | # keep some context around matches grep -Pi --color "$PAT" # color the matches. done