如何在Word字段中的字符串中搜索多个DOCX文件?

时间:2019-01-21 18:47:16

标签: search ms-word grep field docx

是否有Windows应用程序会在Word(DOCX)文档的字段中搜索文本字符串?像Agent Ransack及其兄弟FileLocator Pro这样的应用程序可以在Word文档中找到字符串,但似乎无法在字段中进行搜索。

例如,我希望能够在Word文档集合中找到所有出现的字符串“ getProposalTranslations”,这些文档的字段具有如下语法:

{ AUTOTEXTLIST  \t "<wr:out select='$.shared_quote_info' datasource='getProposalTranslations'/>" }

请注意,字符串不会出现在文档本身的文本中,而只会出现在字段中。我相信,DOCX文件本质上只是一个zip文件,因此,如果有一个可以在归档文件中进行grep的工具,那可能会起作用。还要注意,我需要能够在许多目录中的数百个或数千个文件中进行搜索,因此,逐个解压缩文件是不可行的。我还没有自己找到任何东西,以为我会在这里问。预先感谢。

1 个答案:

答案 0 :(得分:1)

此脚本应完成您要尝试执行的操作。让我知道是否不是这种情况。我通常不编写完整的脚本,因为它会损害学习过程,因此,我对每个命令都进行了注释,以便您可以从中学习。

#!/bin/sh

# Create ~/tmp/WORDXML folder if it doesn't exist already
mkdir -p ~/tmp/WORDXML

# Change directory to ~/tmp/WORDXML
cd ~/tmp/WORDXML

# Iterate through each file passed to this script
for FILE in $@; do
{
    # unzip it into ~/tmp/WORDXML
    # 2>&1 > /dev/null discards all output to the terminal
    unzip $FILE 2>&1 > /dev/null

    # find all of the xml files
    find -type f -name '*.xml' | \

    # open them in xmllint to make them pretty. Discard errors.
    xargs xmllint --recover --format 2> /dev/null | \

    # search for and report if found
    grep 'getProposalTranslations' && echo " [^ found in file '$FILE']"

    # remove the temporary contents
    rm -rf ~/tmp/WORDXML/*

}; done

# remove the temporary folder
rm -rf ~/tmp/WORDXML

将脚本保存在任意位置。随便命名。我将其命名为docxfind。通过运行chmod +x docxfind使它可执行。然后,您可以像这样运行脚本(假设您的终端在同一目录中运行):./docxfind filenames...