我有Linux Mint 17.2。
我希望能够在任何.odt .ods .doc&中任意地搜索特定字符串的特定目录。 .xls文件。搜索字符串中可能包含空格,例如“喜欢这个或这个”。
我相信.odt .ods .doc .xls文档文件以压缩或二进制格式保存,这使得直接使用grep搜索不适用的内容。
该解决方案还需要能够搜索其中包含空格的文件名,例如“this long file name.odt”。
请格式化为单行。
如果你可以添加find,那么可以搜索特定的文件类型或文件名,这也是有益的。
谢谢
ps这可能不像它最初出现的那样直截了当。例如,发布here的解决方案如下
sudo apt-get install antiword
for i in *.doc; do
antiword $i | grep 185223 && echo Found in $i
done
但是它无法处理其中包含空格的文件名。
发布的一个想法here显示了如何使用sed搜索其中包含空格的文件名,虽然我无法将其从给定的管道单行转换为多行脚本,其中包含一个循环,变量,如上所示。
答案 0 :(得分:0)
为您当前的目录尝试类似的内容:
grep -ri --include=*.odt "like this or this" .
这将递归搜索(-r)当前目录的所有文件中的字符串的所有odt文件。 (。)它将不区分大小写(-i)。
答案 1 :(得分:0)
用于查找文件的UNIX命令是命名的(不是偶然的)find
:
find . \( -name '*.odt' -o -name '*.ods' -o -name '*.doc' -o -name '*.xls' \) -print |
while IFS= read -r file
do
antiword "$file" | grep 185223 && echo Found in "$file"
done
如果您的文件名包含换行符,则上述操作将失败 - 如果可能发生这种情况,请将antiword...
部分放入shell脚本并使用xargs调用它:
find... -print0 | xargs -0 command
您可能希望查看grep args来处理185223作为较大字符串的一部分发生或在文件中多次出现(在第一次匹配后退出?)并让grep打印匹配的文件名本身而不是需要回显。