質問: Unix grep コマンドで OR、AND、および NOT 演算子を使用する方法をいくつかの例を挙げて説明できますか?
答え: grep には、OR および NOT 演算子に相当するオプションがあります。 grep AND 演算子はありません。ただし、パターンを使用して AND をシミュレートできます。以下の例は、Linux の grep コマンドで OR、AND、および NOT を使用する方法を理解するのに役立ちます。
以下の例では、次の employee.txt ファイルが使用されています。
$ cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy Manager Sales $6,000
これらの grep コマンドの例に基づいて、grep が非常に強力であることは既にご存じでしょう。
grep OR 演算子
grep OR には、次の 4 つの方法のいずれかを使用します。 grep OR 演算子については、下記の方法 3 をお勧めします。
1. grep または \| を使用
オプションなしで grep コマンドを使用する場合は、\| を使用する必要があります。 or 条件の複数のパターンを分離します。
grep 'pattern1\|pattern2' filename
たとえば、employee.txt ファイルから Tech または Sales を grep します。パイプの前にバック スラッシュがないと、以下は機能しません。
$ grep 'Tech\|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
2. grep または -E を使用
grep -E オプションは拡張正規表現用です。 -E オプションを指定して grep コマンドを使用する場合は、 | を使用するだけです。 or 条件の複数のパターンを分離します。
grep -E 'pattern1|pattern2' filename
たとえば、employee.txt ファイルから Tech または Sales を grep します。 | を使用するだけです複数の OR パターンを分離します。
$ grep -E 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
3. grep または egrep の使用
egrep は「grep -E」とまったく同じです。そのため、egrep を (オプションなしで) 使用し、 or 条件の複数のパターンを分離します。
egrep 'pattern1|pattern2' filename
たとえば、employee.txt ファイルから Tech または Sales を grep します。 | を使用するだけです複数の OR パターンを分離します。
$ egrep 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
4. grep または grep -e の使用
grep -e オプションを使用すると、1 つのパラメーターのみを渡すことができます。 or 条件に複数のパターンを使用するには、1 つのコマンドで複数の -e オプションを使用します。
grep -e pattern1 -e pattern2 filename
たとえば、employee.txt ファイルから Tech または Sales を grep します。複数の OR パターンには、grep で複数の -e オプションを使用します。
$ grep -e Tech -e Sales employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000
Grep AND
5. -E ‘pattern1.*pattern2’ を使用して grep AND
grep には AND 演算子はありません。ただし、grep -E オプションを使用して AND をシミュレートできます。
grep -E 'pattern1.*pattern2' filename grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename
次の例では、「Dev」と「Tech」の両方を (同じ順序で) 含むすべての行を grep します。
$ grep -E 'Dev.*Tech' employee.txt 200 Jason Developer Technology $5,500
次の例では、「Manager」と「Sales」の両方を (任意の順序で) 含むすべての行を grep します。
$ grep -E 'Manager.*Sales|Sales.*Manager' employee.txt
注: 効果的な使い方を知っていれば、grep での正規表現の使用は非常に強力です。
6.複数の grep コマンドを使用した grep AND
パイプで区切られた複数の grep コマンドを使用して、AND シナリオをシミュレートすることもできます。
grep -E 'pattern1' filename | grep -E 'pattern2'
次の例は、同じ行に「Manager」と「Sales」の両方を含むすべての行を grep します。
$ grep Manager employee.txt | grep Sales 100 Thomas Manager Sales $5,000 500 Randy Manager Sales $6,000
Grep NOT
7. grep -v を使用しない grep
grep -v を使用すると、NOT 条件をシミュレートできます。 -v オプションは逆一致用です。つまり、指定されたパターンを除くすべての行に一致します。
grep -v 'pattern1' filename
たとえば、キーワード「Sales」を含む行を除くすべての行を表示します。
$ grep -v Sales employee.txt 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500
NOT を他の演算子と組み合わせて、強力な組み合わせを作成することもできます。
たとえば、次の例では、マネージャーまたは開発者が表示されます (ボットはセールスを無視します)。
$ egrep 'Manager|Developer' employee.txt | grep -v Sales 200 Jason Developer Technology $5,500 400 Nisha Manager Marketing $9,500