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