Как я могу выполнить grep на epub/mobi файлах?

2 RPMs

Файлы являются остатками 2 RPM-пакетов. При выполнении следующей команды, Вы видите, какие RPMs ответственны за эти каталоги:

# centos 6.4
$ for i in /etc/sysconfig/networking /etc/sysconfig/network-scripts; do echo "==> $i"; rpm -qf $i;done
==> /etc/sysconfig/networking
system-config-network-tui-1.6.0.el6.2-1.el6.noarch
initscripts-9.03.31-2.el6.centos.1.x86_64
==> /etc/sysconfig/network-scripts
initscripts-9.03.31-2.el6.centos.1.x86_64

2 RPMs довольно стары, у меня есть древнее Ядро Fedora 3 системы, которые имеют эти 2 каталога, как принадлежавшие initscripts, таким образом, это надеется быть первоначальным владельцем.

# fedora core 3
$ rpm -qf /etc/sysconfig/networking /etc/sysconfig/network-scripts/
initscripts-7.93.7-1
initscripts-7.93.7-1

В какой-то момент конфигурационные файлы для инструмента, system-config-network расширенный в эти каталоги также:

# centos 6.4
$ rpm -ql system-config-network-tui-1.6.0.el6.2-1.el6.noarch|grep "^/etc/.*/network.*"
/etc/sysconfig/networking
/etc/sysconfig/networking/devices
/etc/sysconfig/networking/profiles
/etc/sysconfig/networking/profiles/default

То использование GUI выше каталогов

Случайно графический интерфейсы пользователя могут одинаково сбивать с толку, но существует действительно просто единственный, который обнаруживает, назвали ли это в X средах или в терминале и отображает соответствующий "GUI" для данной среды.

$ more /usr/sbin/system-config-network
#!/bin/sh

if [ -n "$DISPLAY" -a -f /usr/sbin/system-config-network-gui ]; then
    exec /usr/sbin/system-config-network-gui "$@"
else
    exec /usr/sbin/system-config-network-tui "$@"

system-config-network-gui

                       ss of gui

system-config-network-tui

ss of tui

                          ss of profiles

                                 ss of one profile

Примечание: tui версия и gui версия GUI и имеют это понятие "профилей" и "устройств", с которыми эта информация хранится в каталогах /etc/sysconfig/networking/*.

Что относительно ifcfg -* файлы?

Таким образом, то, с чем нас оставляют, является запутывающей грудой забавы. Следующий сервис и сценарии зависят от ifcfg-* файлы, которые являются действительно ключевыми для управления сетью на поле Red Hat:

  • Сетевая служба /etc/init.d/network
  • Сценарий /etc/sysconfig/network-scripts/ifup
  • Вниз сценарий /etc/sysconfig/network-scripts/ifdown

Таким образом что относительно графический интерфейсов пользователя?

  1. Упомянутые выше графический интерфейсы пользователя являются действительно старинными вещами, они действительно все еще работают, но в целом если Вы не используете NetworkManager, вероятно, легче в конечном счете просто управлять информацией для конфигураций сети непосредственно путем управления файлами под /etc/sysconfig/network-scripts/ifcfg-*.

  2. Если Вы не делаете основные типы конфигураций сети, некоторые функции/возможности, доступные Вам при установке сети, не могут быть доступными через tui/gui так действительно NetworkManager или ifcfg-* файлы являются наилучшими вариантами.

  3. tui/gui инструменты заканчивают тем просто, что вписали в данные /etc/sysconfig/network-scripts/ifcfg-* через ссылки Вы первоначально спросили о, таким образом, Вы могли бы также просто отредактировать файлы непосредственно.

4
01.05.2014, 19:51
4 ответа
[113216] Эти файлы можно легко перевести в grep, предоставив опцию [113656]-a[113657] для интерпретации файлов как ascii:

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

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

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

Это проблема не в том, что [113664]grep[113665] не может осуществлять поиск в этих файлах, а в том, что [113666] вы[113667] не предоставляете правильную строку поиска. То же самое произошло бы, если бы Вы прочитали файл с японским текстом, используя некоторую японскую переводческую программу на английский язык, а затем надеялись, что Вы сможете найти [113668]английские слова[113669], смазав оригинальный файл. С помощью [113670]-a[113671] и правильных японских (двоичных) образцов слов, [113672]grep[113673] будет работать просто отлично.[113225].

6
27.01.2020, 20:48

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

1
27.01.2020, 20:48

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

1
27.01.2020, 20:48

Это работало на 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 
5
27.01.2020, 20:48

Теги

Похожие вопросы