web-dev-qa-db-ja.com

grep egrep複数文字列

Str1とstr2とstr3といういくつかの文字列があるとします。

  • すべての文字列を含む行を見つける方法は?
  • それらのいずれかを持つことができる行を見つける方法は?
  • そして、str1とstr2とstr3のどちらかを含む行を見つける方法[しかし両方ではない?]?
14
Tim

これは3つの質問のように見えます。これらの種類の式を組み合わせる最も簡単な方法は、複数のパイプを使用することです。特に、正規表現( egrep を使用)は、順序の独立性が必要であることを示唆しているように見えるため、不当になります。

だから、順番に、

  1. grep str1 | grep str2 | grep str3

  2. egrep '(str1 | str2 | str3)'

  3. grep str1 | egrep '(str2 | str3)'

「and」形式はegrepを使用して順序に依存しない方法で実行できますが、パイプされたgrepsを使用して順序に依存しないandを実行し、正規表現を使用して順序に依存しないまたはを覚える方が簡単だと思います。

28
groundhog

grepは先読みをサポートしていないため、「すべて」または「これに加えてこれらのいずれか」のケースを合理的に行うことはできません。 Perlを使用します。 「任意の」場合は、egrep '(str1|str2|str3)' fileです。

「すべて」の場合を行うための不合理な方法は次のとおりです。

egrep '(str1.*str2.*str3|str3.*str1.*str2|str2.*str1.*str3|str1.*str3.*str2)' file

つまり、順列を構築します。もちろん、これはとんでもないことです。

「これとそれらのいずれか」についても、同様に:

egrep '(str1.*(str2|str3)|(str2|str3).*str1)' file
8
chaos

grep -E --color "string1 | string2 | string3 ...."

たとえば、AMD(svm)またはIntel(vmx)プロセッサを使用しているシステムかどうか、64ビット(lm)かどうかを確認するには、lmはロングモードを意味します。つまり、64ビットを意味します...

コマンドの例:

grep -E --color "lm | svm | vmx"/proc/cpuinfo

-Eは複数の文字列を検索する必要があります

4
user3346427