如何使用grep反向搜索文件夹中的文件

flseospp  于 2022-11-04  发布在  Unix
关注(0)|答案(1)|浏览(255)

我正在尝试创建一个脚本,它将从多个日志文件中查找丢失的主题。这些日志文件是自上而下填充的,所以最新的日志在文件的底部。我只想grep这个文件的最后一行,其中包括UNKNOWN_TOPIC_OR_PARTITION。这应该在多个名称完全不同的文件中完成。grep是最好的解决方案,还是有其他解决方案适合我的需要。我已经试过加尾巴了,但似乎不起作用。
missingTopics=$(grep -Ri -m1 --exclude=*.{1,2,3,4,5} UNKNOWN_TOPIC_OR_PARTITION /app/tibco/log/tra/domain/)

eyh26e7m

eyh26e7m1#

您可以尝试findtacgrep的组合:

find /app/tibco/log/tra/domain -type f ! -name '*.[1-5]' -exec sh -c \
  'tac "$1" | grep -im1 UNKNOWN_TOPIC_OR_PARTITION' "sh" '{}' \;

tac反向打印文件,find-exec sh -c SCRIPT "sh" '{}' \;操作在每次找到与先前测试匹配的文件时执行shell SCRIPTSCRIPT是以"sh"作为参数$0并以找到的文件的路径作为参数$1来执行的。
如果性能存在问题,您可以通过以下方法来提高性能:

find . -type f ! -name '*.[1-5]' -exec sh -c 'for f in "$@"; do \
  tac "$f" | grep -im1 UNKNOWN_TOPIC_OR_PARTITION; done' "sh" '{}' +

这将产生更少的shell。如果安全性也是一个问题,你也可以用-execdir替换-exec(即使使用这个SCRIPT,我没有立即看到任何漏洞)。

相关问题