行に文字列が含まれている場合はgrepする方法は?

行に文字列が含まれている場合はgrepする方法は?

という設定ファイルがあります。学生

grade1 class1 11 student
grade1 class1 12 student
grade2 class1 21 student
grade2 class2 22 student
......

今私はテストファイルファイルを読む学生です。グレード名とグレードを入力すると、2つの文字列を含む行がコピーされます。学生のコピー。コードは以下のように表示されます。

echo Input gradename and studentnumber
read gradename
read studentnumber

if (input gradename and studnetnumber);
then
    echo "the line include them" >> student_copy

たとえば、

if (input grade1 and 11);
then 
    echo grade1 class1 11 student >> student_copy

ベストアンサー1

grep論理的ではないそしてタスク(例えばmatch patternA AND patternB)に最も近いタスクは、可能なバリアント(たとえばgrep -E 'patternA.*patternB|patternB.*patternA')に一致するように長い正規表現を設定することです。一致するパターンが多いと、非常に不器用で扱いにくくなることがあります。

必要なものを達成する最も簡単な方法は、代わりにスクリプト言語(awkまたは)をperl使用することですgrep

たとえば、次の行awkは、両方のパターンが発生するすべての行と一致します。

awk '/patternA/ && /patternB/'

たとえば、パターンAは含まれているがパターンBは含まれていない行を一致させたい場合は、すべてのパターン一致を元に戻すことができます。まさかタスク):

awk '/patternA/ && ! /patternB/'

注:簡単な方法はgrep patternA | grep patternB(またはgrep patternA | grep -v patternB)を使用することです。するgrep論理AND(またはAND NOT)を実装しますが、単一またはawkコマンドperlの代わりに複数のコマンドを実行する必要があります。

おすすめ記事