0

よう皆、

ファイル内で 2 つのパターンを検索する必要があります。元。pattern1pattern2と、まさにその特定の単語が必要です。このコマンドの成功または失敗に基づいて、「IF」を使用して 2 つのアクションを実行します。

例。

if (condition)

条件は、ファイル内の 2 つのパターンを検索するegrepコマンドを評価しています。($? = 0)ファイル内に両方のパターンが見つかった場合にのみ、条件が trueになります。そうでなければ失敗するはずです。

しかし、実際のegrepコマンドはパターン間でOR関数を実行しており、パターン間でANDロジックが必要です。私を助けてください。

4

4 に答える 4

1

次のように、シェル スクリプトで 2 つの grep を接続するだけでよいと思います。

#!/bin/bash

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

-q、からの出力がないことを保証しegrep(パターンが見つかった場合に true を返すだけです)、ファイルで両方のパターンが見つかった場合にのみ が返される&&ことを保証します。exit 0

于 2013-10-10T11:24:13.153 に答える
0

論理的に曖昧です。同じ行にあるかどうかに関係なく、ファイル内の両方のパターンをチェックする場合は、次のようにします。

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

両方のパターンを同じ行に表示する場合

grep 'pattern1' somefile | grep 'pattern2'
于 2013-10-10T11:24:09.817 に答える
0
egrep -z -q 'pattern1.*pattern2|pattern2.*pattern1'

ファイルに両方のパターンが存在する場合は true を返し、それ以外の場合は false を返します。

于 2013-10-18T08:19:29.587 に答える
0

こんにちは、次のことがうまくいきました:

要件: 異なる行で 2 つの異なるパターンを検索し、2 つのパターン検索の 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

注 : 両方のパターンが同じファイルの異なる行にあります

于 2013-10-18T07:27:09.967 に答える