На этот вопрос уже есть ответ:
я пытаюсь прочитать файл odt с терминала. Когда я набираю cat myfile.odt, он показывает мне подобное изображение
Формат Libreoffice имеет текст в сжатом разделе двоичного файла, таким образом cat
не работает. Существует опция: lowriter --convert-to example.txt
, который повторно упакует его, & существует - опция печати, если это - то, что Вы хотели. man lowriter
информативно.
, Почему это не работает, поскольку Вы ожидали
cat
работы над текстовые файлы . файл odt технически (и очень упрощенный) архивировал папка, содержащая приблизительно xml файлы.
Как таковой' кошка ' не может использоваться с этой целью. Это работает только над простым текстом.
, Что можно сделать вместо этого
, Вы могли, конечно, извлечь его и проанализировать соответствующие XML-файлы, но я предполагаю, что это - излишество в Ваших целях.
альтернатива для того, что Вы пробуете:
odt2txt --stdout file.odt
это обеспечит то же как кошку на txt файле, но займет больше времени в зависимости от размера файла. Вы должны будете иметь , unoconv установил
sudo apt install unoconv
odt файл является пакетом zip, которые включают форматирование и другие функции документа.
я Вы хотите видеть содержание odt файла, который необходимо было бы разархивировать. Фактические слова, содержавшиеся в документе, находятся в content.xml
файл.
документы слова Micosoft (*.docx) является тем же типом пакета. Текст слова документы находится в файле заархивированного sudirectory, названного document.xml
.
я записал сценарий для выполнения текстового поиска на моих документах. Сценарий взял бы два аргумента в пользу файла (имя файла и текст для нахождения), извлек бы файл к временной папке, grep содержание XML-файла затем отображают имя файла, которое соответствует искавшему тексту.
<час>Демонстрационный Сценарий для поиска всех odt файлов в каталоге и это - подкаталоги:
#!/bin/bash
directory="$1"
string="$2"
tempdir="/tmp/searchdir"
echo "Searching directory [$directory] for [$string]"
echo "---------------------------------------------"
if [ $# -ne 2 ]; then
echo "Parameter error... Usage: [Directory to Search] [String to search]"
echo "Note: Use quotes if spaces are included in directory or search string."
echo "Exiting..."
exit 1
fi
mkdir $tempdir
while IFS= read -r -d '' i;
do
# echo Processing: $i
unzip -o "$i" -d $tempdir content.xml > /dev/null 2>&1
found=$(egrep -i "$string" $tempdir/content.xml)
if [[ "$found" ]]; then
echo "Found in [$i]"
fi
[[ -f /tmp/content.xml ]] && rm /tmp/content.xml # remove the temporary file if exist
done < <(find $directory -name \*odt -print0)
rm -r $tempdir