我尝试在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
2条答案
按热度按时间wbgh16ku1#
您正在执行:
我建议你:
有什么区别吗?
=〉给你一个文件列表。
当添加
| grep -e 103=16
时,将对文件名执行该操作。当添加
-exec grep ...
时,您将在文件itselfs上执行该操作。93ze6v8z2#
首先,您不是在搜索
TRADX_something.log
的文件,而是只搜索名为TRADX_
的文件(不区分大小写,因此也会找到TradX_
)。然后,您将文件名提供给
grep
,但从不查看这些文件的内容。在grep
手册页中,您看到可以通过stdin或通过在命令行上指定文件名来提供文件内容。在您的情况下,后者是可行的方法。因此,您可以执行如果您只对匹配线感兴趣,或
如果您还想查看模式匹配的文件名。原因是
grep
仅在命令行中看到多个文件名并且/dev/null提供第二个伪文件时才打印文件名。find 用文件名替换{}
。顺便说一句,我对 grep 使用了
-f
,而不是您的-e
,因为您似乎没有使用任何特定的正则表达式模式。但是这个任务不需要
find
,另一种方法是显式循环:虽然这个循环乍看上去比较复杂,但是如果您想对文件做更多的事情而不仅仅是对行执行grep操作,例如对包含模式的文件执行特定的操作,那么扩展这个逻辑会更容易。