使用egrep的Unix搜索模式

时间:2013-10-10 11:14:43

标签: shell unix if-statement grep

朋友们,

我需要在文件中搜索两种模式。防爆。 pattern1 pattern2 我想要那个特定的单词。根据此命令的成功或失败,我将使用“IF”进行两次操作。

例如

if (condition)

条件是评估egrep命令以搜索文件中的两个模式。 仅当在文件中找到两个模式时,条件才应为真($? = 0)。否则它应该失败。

但实际的egrep命令在模式之间执行 OR 功能,我希望模式之间有 AND 逻辑。请帮帮我。

4 个答案:

答案 0 :(得分:1)

我想你可以在shell脚本中连接两个greps,如下所示:

#!/bin/bash

if egrep -q "pattern1" filename && egrep -q "pattern2" filename; then
  exit 0
else
  exit 1
fi

-q确保egrep没有输出(如果找到模式,则返回true),&&确保仅返回exit 0如果在文件中找到两个模式。

答案 1 :(得分:0)

这在逻辑上是模糊的。如果要检查文件中的两种模式,无论它们是否在同一行,您都可以

grep 'pattern1' somefile && grep 'pattren2' somefile

如果您希望两个模式存在于同一行

grep 'pattern1' somefile | grep 'pattern2'

答案 2 :(得分:0)

以下为我解决了问题:

要求:在不同的行上搜索两种不同的模式,并根据两种模式搜索的AND操作采取行动。

代码:

grep -q "pettern1" file1 && grep -q "pettern2" file1
if [ $? -ne 0 ]
then
   echo "Both patterns are not found"
else
   echo "Both patterns are found"
fi

注意:两个模式都位于同一文件中的不同行

答案 3 :(得分:0)

egrep -z -q 'pattern1.*pattern2|pattern2.*pattern1'

如果文件中存在两种模式,则返回true,否则返回false。