Команда cat не показывает строки текста [дубликат]

На этот вопрос уже есть ответ:

я пытаюсь прочитать файл odt с терминала. Когда я набираю cat myfile.odt, он показывает мне подобное изображение

enter image description here

10
задан 23 September 2016 в 01:18

3 ответа

Формат Libreoffice имеет текст в сжатом разделе двоичного файла, таким образом cat не работает. Существует опция: lowriter --convert-to example.txt, который повторно упакует его, & существует - опция печати, если это - то, что Вы хотели. man lowriter информативно.

22
ответ дан 23 November 2019 в 04:15

, Почему это не работает, поскольку Вы ожидали

cat работы над текстовые файлы . файл odt технически (и очень упрощенный) архивировал папка, содержащая приблизительно xml файлы.

Как таковой' кошка ' не может использоваться с этой целью. Это работает только над простым текстом.

, Что можно сделать вместо этого

, Вы могли, конечно, извлечь его и проанализировать соответствующие XML-файлы, но я предполагаю, что это - излишество в Ваших целях.

альтернатива для того, что Вы пробуете:

odt2txt --stdout file.odt

это обеспечит то же как кошку на txt файле, но займет больше времени в зависимости от размера файла. Вы должны будете иметь , unoconv установил

sudo apt install unoconv
14
ответ дан 23 November 2019 в 04:15

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
6
ответ дан 23 November 2019 в 04:15

Другие вопросы по тегам:

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