Grep 命令行将目录(和子目录)中的所有.docx转换为文本文件并写入新文件
我想从命令行将目录(和子目录)中的所有.docx文件转换为文本文件(这样我就可以在这些文件上使用grep)。我找到了这个Grep 命令行将目录(和子目录)中的所有.docx转换为文本文件并写入新文件,grep,unzip,doc,Grep,Unzip,Doc,我想从命令行将目录(和子目录)中的所有.docx文件转换为文本文件(这样我就可以在这些文件上使用grep)。我找到了这个 unzip -p tutu.docx word/document.xml | sed -e 's/<\/w:p>/\n/g; s/<[^>]\{1,\}>//g; s/[^[:print:]\n]\{1,\}//g' 我试着将两者混合,但没有成功。。。一个命令行,将同时做这两件事将不胜感激 谢谢您以下脚本 递归地转换运行它的目录中的所有doc
unzip -p tutu.docx word/document.xml | sed -e 's/<\/w:p>/\n/g; s/<[^>]\{1,\}>//g; s/[^[:print:]\n]\{1,\}//g'
我试着将两者混合,但没有成功。。。一个命令行,将同时做这两件事将不胜感激
谢谢您以下脚本
- 递归地转换运行它的目录中的所有docx文件(将
中的
调整到所需的起点) - 将txt文件写入找到
文件的位置docx
find . -name "*.docx" | while read file; do
unzip -p $file word/document.xml |
sed -e 's/<[^>]\{1,\}>//g; s/[^[:print:]]\{1,\}//g' > "${file/docx/txt}"
done
您可以使用转换docx文件。它不支持.doc
文件,因此您需要同时使用pandoc和antiword
重复使用而循环:
find . -name '*.docx' | while read i; do pandoc --from docx --to plain "${i}" >"${i/docx/txt}"; done
非常感谢。但看起来它不是递归工作的。而且,我不想创建一个新目录,而是希望它将文件写入找到.docx文件的目录。有什么调整吗?@jejuba更改了脚本,使其从当前目录开始。它确实递归地工作(也是旧版本)。将其更改为存储找到docx的txt。另外,grep现在有点复杂了,因为你需要递归地执行grep,谢谢它工作得很好。问题是我的.docx文件不是真正的.docx文件。我必须解决这个问题。非常感谢。@jejuba如果你想上传docx文件并链接到这里,我可以帮你把它转换成txtOk,我知道出了什么问题。我一直有以下信息:模糊重定向。如果目录中有空格,脚本将不会进入目录。我在…>“${file/docx/txt}”,现在它工作正常了!谢谢你。我尝试使用pandoc,但出于某些原因,它会创建空的.txt文件,并带有以下警告:pandoc:unknown reader:docx。有什么想法吗?但是循环是好的:它是递归的,并在版本中添加了docx支持的地方创建文件。你使用哪个版本?你可能需要。对,我有版本1.12。。。这是一个稳定的Debian版本。我必须看看是否可以通过测试安装它。最好的,
grep -r "some text" --include "*.txt" .
find . -name '*.docx' | while read i; do pandoc --from docx --to plain "${i}" >"${i/docx/txt}"; done