Как искать несколько файлов DOCX для строки в поле Word? - PullRequest
0 голосов
/ 21 января 2019

Есть ли приложение для Windows, которое будет искать строку текста в полях документа Word (DOCX)?Такие приложения, как Agent Ransack и его старший брат FileLocator Pro, могут находить строки в документах Word, но кажутся неспособными к поиску в полях.

Например, я хотел бы иметь возможность находить все вхождения строки "getProposalTranslations"в коллекции документов Word, которые имеют поля с синтаксисом, подобным следующему:

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

Обратите внимание, что строка не появляется в тексте самого документа, а только внутри поля.По сути, я считаю, что файл DOCX - это просто zip-файл, поэтому, если есть инструмент, который может выполнять поиск в архивах, он может работать.Также обратите внимание, что мне нужно иметь возможность поиска по сотням или, возможно, тысячам файлов во многих каталогах, поэтому разархивирование файлов по одному невозможно.Я ничего не нашла сама и решила спросить здесь.Заранее спасибо.

1 Ответ

0 голосов
/ 21 января 2019

Этот скрипт должен выполнить то, что вы пытаетесь сделать. Дайте мне знать, если это не так. Я обычно не пишу целые сценарии, потому что это может повредить процессу обучения, поэтому я прокомментировал каждую команду, чтобы вы могли извлечь из нее уроки.

#!/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...

...