Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grep 命令行将目录(和子目录)中的所有.docx转换为文本文件并写入新文件_Grep_Unzip_Doc - Fatal编程技术网

Grep 命令行将目录(和子目录)中的所有.docx转换为文本文件并写入新文件

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

我想从命令行将目录(和子目录)中的所有.docx文件转换为文本文件(这样我就可以在这些文件上使用grep)。我找到了这个

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
    文件的位置
Bash脚本:

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