用于搜索 docx 文件的命令行工具

用于搜索 docx 文件的命令行工具

是否有命令行工具可以对 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 文档的索引工具。这些工具允许您对文档建立索引,然后有效地搜索索引中的单词。他们不允许全文搜索。

答案3

DOCx 是压缩的,它不是文本格式。所以你需要的是一个转换器第一的。之后,您可以find在转换后的文件上使用该命令。

答案4

你看过吗开放办公忍者
(不知道cygwin支持)

相关内容