在目录中搜索MS word文件以获取Linux中的特定内容

Jos*_*ine 12 unix linux ms-word

我有一个充满MS word文件的目录结构,我必须在目录中搜索特定的字符串.到目前为止,我使用以下命令在目录中搜索文件

找 .-exec grep -li'search_string'{} \;

找 .-name'*' - print | xargs grep'search_string'

但是,此搜索不适用于MS word文件.

是否可以在Linux中的MS word文件中进行字符串搜索?

小智 16

我是一名翻译,并且几乎不知道脚本编写,但我很生气,因为grep无法扫描Word .doc文件,我研究了如何使这个小shell脚本使用catdoc和grep来搜索目录.doc文件的给定输入字符串.

您需要安装catdocdocx2txt打包

#!/bin/bash
echo -e "\n
Welcome to scandocs. This will search .doc AND .docx files in this directory for a given string. \n
Type in the text string you want to find... \n"
read response
find . -name "*.doc" | 
while read i; do catdoc "$i" | 
grep --color=auto -iH --label="$i" "$response"; done
find . -name "*.docx" | 
while read i; do docx2txt < "$i" | 
grep --color=auto -iH --label="$i" "$response"; done
Run Code Online (Sandbox Code Playgroud)

欢迎所有改进和建议!

  • 如果您使用的是 UNIX,“textutil”可以将“.doc”和“.docx”转换为文本。例如,“textutil -stdout -cat txt theFile” (5认同)
  • 这非常令人印象深刻.所以我可以搜索多个子文件夹和文件夹,看看里面.doc - 我也会检查.docx虽然也是.. (2认同)

Dan*_*anB 6

这是一种使用“解压缩”将整个内容打印到标准输出,然后通过管道传输到“grep -q”以检测输出中是否存在所需字符串的方法。它适用于 docx 格式的文件。

#!/bin/bash
PROG=`basename $0`

if [ $# -eq 0 ]
then
  echo "Usage: $PROG string file.docx [file.docx...]"
  exit 1
fi

findme="$1"
shift

for file in $@
do
  unzip -p "$file" | grep -q "$findme"
  [ $? -eq 0 ] && echo "$file"
done
Run Code Online (Sandbox Code Playgroud)

将脚本另存为“inword”并在三个文件中搜索“wombat”:

$ ./inword wombat file1.docx file2.docx file3.docx
file2.docx
Run Code Online (Sandbox Code Playgroud)

现在您知道 file2.docx 包含“wombat”。您可以通过添加对其他 grep 选项的支持来变得更漂亮。玩得开心。


Mar*_*ski 0

您是否尝试过awk \xe2\x80\x98/Some|Word|In|Word/\xe2\x80\x99 document.docx ?

\n