查找并显示来自linux文件夹内日志的信息

lskq00tm  于 2023-01-25  发布在  Linux
关注(0)|答案(2)|浏览(104)

我尝试在Linux中使用bash创建一个小脚本,它允许我查找日志中是否有标记103=16
我有多个名为l51 prdsrv-api 1.nebex.local、l51 prdsrv-oe 1.nebex.local等的文件夹...这些文件夹中有.log文件,如TRADX_gsoe3.log、TRADX_gseuoe2.log等...。
我需要找出这些日志中是否有标记103=16
我正在尝试这个命令
查找. /opt/FIXLOGS/l51 prdsrv * -输入名称“TRADX_”-类型f|grep -e 103=16
但是,它只显示日志名称而不显示内容,以查看是否存在标记103=16

wbgh16ku

wbgh16ku1#

您正在执行:

find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_" -type f | grep -e 103=16

我建议你:

find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_" -type f -exec grep -e "103=16" {} /dev/null \;

有什么区别吗?

find ... -type f

=〉给你一个文件列表。
当添加| grep -e 103=16时,将对文件名执行该操作。
当添加-exec grep ...时,您将在文件itselfs上执行该操作。

93ze6v8z

93ze6v8z2#

首先,您不是在搜索TRADX_something.log的文件,而是只搜索名为TRADX_的文件(不区分大小写,因此也会找到TradX_)。
然后,您将文件名提供给grep,但从不查看这些文件的内容。在grep手册页中,您看到可以通过stdin或通过在命令行上指定文件名来提供文件内容。在您的情况下,后者是可行的方法。因此,您可以执行

find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_*.log" -type f -exec grep -f 103=16 {} \;

如果您只对匹配线感兴趣,或

find . /opt/FIXLOGS/l51prdsrv* -iname "TRADX_*.log" -type f -exec grep -f 103=16 {} /dev/null \;

如果您还想查看模式匹配的文件名。原因是grep仅在命令行中看到多个文件名并且/dev/null提供第二个伪文件时才打印文件名。find 用文件名替换{}
顺便说一句,我对 grep 使用了-f,而不是您的-e,因为您似乎没有使用任何特定的正则表达式模式。
但是这个任务不需要find,另一种方法是显式循环:

shopt -s nocasematch # make globbing case-insensitive
shopt -s globstar # turn on ** globbing
for f in {.,/opt/FIXLOGS/l51prdsrv*}/**/tradx_*.log
do
  [[ -f $f ]] && grep -f 103=16 "$f" /dev/null
done

虽然这个循环乍看上去比较复杂,但是如果您想对文件做更多的事情而不仅仅是对行执行grep操作,例如对包含模式的文件执行特定的操作,那么扩展这个逻辑会更容易。

相关问题