bash - 如何通过管道从查找到解压缩到 grep
问题描述
find . -name "*.ooutline" -print0 | xargs -0 -n1 unzip -c | grep -m 10 -Eo ".{0,20}$1.{0,20}"
“.ooutline”文件是压缩的 OmniOutliner 文件。我想找到它们,包括递归地在子目录中;通过管道将名称解压缩;将每个 .ooutline 文件解压缩到内存中;然后在内存中 grep 解压缩文件的内容。
我没有太多的运气试图用 find 来做到这一点。我确实有一个可用的 bash shell 脚本,如下所示:
#!/bin/bash
for file in *.ooutline; do
if ( unzip -c "$file" | grep --label="$file" -H -m 10 -Eo ".{0,20}$1.{0,20}" ) ; then
printf "\n\n"
fi
done
我希望能够在一条线上用 find 做到这一点。我很感激对此的任何建议。谢谢你。
第二天
进步!这有效,但仅适用于列表中的文件之一。这意味着这个想法是正确的,但我有一些细节错误。注意:我从堆栈上的另一篇文章中得到了 find-exec-unzip 的想法:我确实有带空格的文件名。
find . -name '*.zip' -exec sh -c 'unzip -c -d "`dirname \"{}\"`" "{}"' ';' | grep -m 10 -Eo ".{0,20}Peter.{0,20}"
我试过这个
find . -name '*.zip' -exec sh -c 'unzip -c "{}"' ';' | grep -m 10 -Eo ".{0,20}Peter.{0,20}"
它返回了这些结果
版本彼得睡着了,他们之所以把彼得带到这里是为了这个弥撒,阿德金斯博士发现彼得跪在重症监护室外祈祷。彼得确信五号还没有去那里。彼得给他演讲
...所以它肯定会从一个文件中返回一些东西(对科幻小说的分析)。
解决方案
使用zipgrep
你可以这样做:
find . -name '*.ooutline' -print0 | xargs -0 zipgrep -Ho '.{0,20}$1.{0,20}'
推荐阅读
- windows - 将自定义环境添加到 CreateEnvironmentBlock()
- python-3.x - 在 Python 中拆分结果以获取 CPU 使用率
- arrays - Cloud Firestore 读取数组
- powershell - 使用powershell从不同的脚本调用变量
- node.js - 如何检查 HTTP2/Server Push 是否正常工作?
- reactjs - 依赖相同 UseEffect() 条件的多个 React 组件
- python - 登录 GCP SQL:如何确保 PromptSession 被导入或以其他方式解决
- snowflake-cloud-data-platform - 为什么雪花临时表的创建者不是它的所有者?
- ocr - tesseract 无法检测简单的二字图像中的字符
- node.js - 如何调试 Node.js 服务器?调试器跳过我的断点!(使用 VSCode)