という設定ファイルがあります。学生
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
の代わりに複数のコマンドを実行する必要があります。