Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用egrep搜索包含所有短语的字符串_Linux_Bash_Grep - Fatal编程技术网

Linux 如何使用egrep搜索包含所有短语的字符串

Linux 如何使用egrep搜索包含所有短语的字符串,linux,bash,grep,Linux,Bash,Grep,这就是我现在拥有的。我只需要返回一个文件中的行数,带有登录名、失败、ip地址模式,并且不包含mymathworks或nacmpa 当前正则表达式仅返回不带nacmpa的文件中的行数。egrep的-c选项仅打印计数,而不是内容,即,在获得登录计数后,失败计数将永远不会匹配(因为任何数字都不会匹配文本失败)。将管道拆分为多个部分可能有助于您解决问题。简短回答:您应该只在pilleline的第一个egrep上列出输入文件(wrapper.log),而在最后一个-c上只给出选项。另外,我非常确定您可以简

这就是我现在拥有的。我只需要返回一个文件中的行数,带有登录名、失败、ip地址模式,并且不包含mymathworks或nacmpa


当前正则表达式仅返回不带nacmpa的文件中的行数。

egrep的
-c
选项仅打印计数,而不是内容,即,在获得
登录
计数后,
失败
计数将永远不会匹配(因为任何数字都不会匹配文本
失败
)。将管道拆分为多个部分可能有助于您解决问题。

简短回答:您应该只在pilleline的第一个
egrep
上列出输入文件(wrapper.log),而在最后一个
-c
上只给出选项。另外,我非常确定您可以简化此过程,以使用更少的管道阶段

长句回答:为了了解出了什么问题,让我们看看管道的前几个阶段发生了什么。管道中的第一个命令是

egrep -c LOGIN wrapper.log|egrep -c failed wrapper.log \
|egrep -c '[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}' wrapper.log\
|egrep -cv mymathworks wrapper.log|egrep -cv nacmpa wrapper.log > failed-login.txt
…它搜索wrapper.log并打印包含“LOGIN”的行数。不是包含“LOGIN”的行,而是行数

下一个命令是

egrep -c LOGIN wrapper.log
…它搜索wrapper.log并打印包含“failed”的行数。它不读取输入,因此第一个egrep的输出被完全忽略。即使它真的读了,它也只有一个行数,因此无法判断其中有多少行还包含“failed”

解决方案:从第一个
egrep
中删除
-c
,以便打印实际匹配的行,并从第二个
中删除wrapper.log
,以便搜索第一个
egrep
的输出,而不是返回并重新读取原始文件。管道的所有其他阶段都会出现相同的问题,因此您需要从除第一个阶段以外的所有阶段中删除
包装器.log
(因此其他阶段实际上从管道中读取),并从除最后一个阶段外的所有阶段中删除
-c
(因此您只需在完成所有过滤后进行计数)

但正如我所说,我怀疑管道可以简化很多。“登录”、“失败”和IP地址在行中是否总是以相同的顺序出现?如果是这样,则制作一个包含所有图案的单一图案。对于“mymathworks”和“nacmpa”,您可以使用模式
mymathworks | nacmpa
同时删除这两个选项。因此,您应该能够使用以下内容:

egrep -c failed wrapper.log

您可能需要调整第一个模式,具体取决于顺序或元素,可能还需要调整它们之间的内容。

我在帖子中不清楚。我只想要数量而不是内容。目标是在文件中附加满足所有指定条件的行数。应该是801708行。你能详细说明一下把管道分成几部分是什么意思吗?现在,当我运行整个脚本时,我得到的唯一计数是-cv nacmpa。此外,O.P.在每个
egrep目标之后列出了
wrapper.log
,但与
连接。它不应该只是一个
egrep srchTarget文件| egrep另一个srchtarg | egrep….>输出文件
?祝大家好运。通过一次构建一个cmd来学习调试代码。egrep-c登录包装器.log的输出是什么?那么,
egrep-c LOGIN wrapper.log | egrep-c failed wrapper.log
的输出是什么?该输出有意义吗?如果没有,请在(-;OK)上堆积更多内容之前修复该问题。另请参阅下面我关于对
wrapper.log
的多个引用的评论(通常没有意义)。祝你好运。
egrep 'LOGIN.*failed.*[0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}[.][0-9]{1,3}' wrapper.log \
| egrep -cv 'mymathworks|nacmpa'