是否有命令行工具可以对 docx 文件进行文本搜索?我尝试过grep
,但它不适用于 docx,尽管它可以很好地处理 txt 和 xml 文件。我可以先将 docx 转换为 txt,但我更喜欢直接对 docx 文件进行操作的工具。我需要该工具在 Cygwin 下工作。
OP编辑:后来我发现实现grep的最简单方法实际上是将这些docx转换为txt,然后对它们进行grep。
答案1
我的grep
解决方案作为一个函数,您可以粘贴到您的.bashrc
docx_search(){ local arg wordfile terms=() root=${root:-/}; for arg; do terms+=(-e "$arg"); done; find 2>/dev/null "${root%/}/" -iname '*.docx' -exec bash -c "$(declare -p terms)"'; for arg; do unzip -p "$arg" 2>/dev/null | grep --quiet --ignore-case --fixed-strings "${terms[@]}" && printf %s\\n "$arg"; done' _ {} +; }
它将查找其参数的任何出现(不区分大小写)并打印匹配的 docx 文件位置。
例子:
$ docx_search 'my example sentence'
/cygdrive/d/example sentences.docx
/cygdrive/c/Users/my user/Documents/example sentences.docx
$ root='/cygdrive/c/Users/my user/' docx_search 'seldom' 'full sentence'
/cygdrive/c/Users/my user/Documents/example sentences.docx
$
可读版本:
docx_search(){
local arg wordfile terms=() root=${root:-/}
# this 'root' assignment allows you to search in a specific location like /cygdrive/c/ instead of everywhere on the machine
for arg; do terms+=(-e "$arg"); done
# We inject the terms to search inside the string with declare -p`
find 2>/dev/null "${root%/}/" -iname '*.docx' -exec \
bash -c "$(declare -p terms)"';
for arg; do
unzip -p "$arg" 2>/dev/null |
grep --quiet --ignore-case --fixed-strings "${terms[@]}" &&
printf %s\\n "$arg"
done' _ {} +
}
答案2
我知道有几种支持 Word 文档的索引工具。这些工具允许您对文档建立索引,然后有效地搜索索引中的单词。他们不允许全文搜索。
- 雷科尔(和反词和无线软件)。我不知道 Cygwin 支持。
- 卢塞恩, 和需要一些组装。我相信可以在 Cygwin 上运行。
- 狮身人面像, 和任何 docx 到文本转换器。Windows 本身支持。
- 追踪器(可能仍然存在一些问题)。 Cygwin 支持看起来很不稳定。
答案3
DOCx 是压缩的,它不是文本格式。所以你需要的是一个转换器第一的。之后,您可以find
在转换后的文件上使用该命令。
答案4
你看过吗开放办公忍者?
(不知道cygwin支持)