有什么方法cat
或less
.odp就像我们.odt提及的文件
这里
答案1
针对您的问题发表的评论林兹温德给了我一个主意。谢谢你,我的朋友。我以前从未尝试过这个,但只要你可以提取你的 odt,你就可以 grep odt 的内容而不是 odt 本身。
因此,该过程将是这样的:
cd THE-FOLDER-CONTAINING-THE-ODT
mkdir ext
unzip THE-ODT-FILE -d ext
cd ext
grep KEYWORDS * -ri
例子:
在此示例中,我位于名为“ray”的文件夹中,其中有一个名为的文档practicas-ray-del-angel-gerardo-membretada-2021.odt
。因此,我将使用相同的过程,只需更改参数即可找到单词“RAYMUNDO”。
cd ray
mkdir ext
unzip practicas-ray-del-angel-gerardo-membretada-2021.odt -d ext
cd ext
grep "raymundo" * -ri
下面的屏幕截图将为您提供整个过程的图像。
脚本
当然,如果您必须在一堆文档中运行此程序,这将是一个大问题,因此我将使用适当的参数将运行的进程放在命令行上。该文件将包含以下内容:
odtgrep脚本
if [[ -d "ext" ]]
then
echo "ext exists. Will not be created but we will remove the contents on it."
rm ext/* -rf
else
echo "First time run? Let's create the ext directory."
fi
unzip $1 -d ext
cd ext
grep "$2" * -ri
解释
目录验证
首先,我们将检查该目录是否ext
存在。
if [[ -d "ext" ]]
then
echo "ext exists. Will not be created but we will remove the contents on it."
rm ext/* -rf
else
echo "First time run? Let's create the ext directory."
fi
如果不存在,我们需要创建它。但如果已经存在,我们只需要清理文件夹内的内容,以防止 zip 命令停止询问我们是否要覆盖现有文件。终端上的消息对于调试目的很有用,但可以根据需要省略。
萃取
一旦我们确定 ext 目录已准备好使用,我们将使用通过命令行传递给脚本的第一个参数解压缩该文件。
unzip $1 -d ext
之后我们将通过以下方式进入目录来处理文件:
cd ext
搜索
此代码将在目录中的每个文件内使用第二个参数在命令行中搜索所需的单词ext
。
grep "$2" * -ri
请注意该content.xml
文件负责保存文本,因此您可能希望更改此代码:
grep "$2" content.xml -i
跑步
该脚本应使用以下命令运行:
for i in *.odt; do bash odtgrep.sh "$i" "raymundo"; done;
这会:
- 使用当前文件夹中的所有 odt 文件创建一个数组
- 对数组中的每个文件运行脚本
- 在每个文件中搜索“raymundo”单词,如果找到则显示结果。
注意事项
- 请确保使用正确的变量和临时(ext)文件夹,以防止数据受损。
- 确保引号可以起作用,并尽可能避免使用空格。
- 当运行一堆文件时,您会在终端上看到大量数据,因此您可能希望使用参数
-l
来grep
显示尽可能少的数据。 - 包含您在搜索中找到的文本的文件名将由 zip 文件本身显示,文本如下:
Archive: practicas-ray-del-angel-gerardo-membretada-2021.odt
如果这对您有用,请告诉我们。欢迎就如何改进此代码提出任何意见或建议。