cat 命令不显示文本行

cat 命令不显示文本行

我正在尝试从终端读取 odt 文件。当我输入 cat myfile.odt 时,它会显示如下图像

在此处输入图片描述

答案1

Libreoffice 格式的文本位于二进制文件的压缩部分内,因此cat无法使用。有一个选项:lowriter --convert-to example.txt它将重新打包它,并且如果您需要,还有一个 --print 选项。man lowriter很有用。

答案2

为什么它没有按预期工作

cat致力于文本文件。 一个奥德特文件在技术上(并且非常简单)是压缩包含一些的文件夹xml文件。

像这样 '' 不能用于此目的。它只适用于纯文本。

你可以做什么

您当然可以提取它并解析相应的 xml 文件,但我想这对于您的目的来说有点小题大做。

您正在尝试的另一种方法是:

odt2txt --stdout file.odt

这将提供与对 txt 文件进行 cat 相同的功能,但会花费更多时间,具体取决于文件的大小。你需要反卷积已安装

sudo apt install unoconv

答案3

odt 文件是一个 zip 包,其中包含文档的格式和其他功能。

如果您想查看 odt 文件的内容,则必须解压缩。文档中包含的实际单词位于文件中content.xml

Micosoft Word 文档 (*.docx) 是同一类型的软件包。Word 文档的文本位于名为 的压缩子目录中的文件中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

相关内容