Grep 'OR'正規表現の問題

Grep 'OR'正規表現の問題

私はgrepと正規表現を使用して、ファイル内の2つの可能な文字列のうちの1つに一致する行を見つけようとしています。これは私のgrepです。

$ grep "^ID.*(ETS|FBS)" my_file.txt

上記のgrepは結果を返しません。ただし、次のいずれかを実行する場合:

$ grep "^ID.*ETS" my_file.txt  

または

$ grep "^ID.*FBS" my_file.txt  

私は特定の行に一致します。私のOR正規表現が一致しないのはなぜですか?ご協力ありがとうございます!

答え1

一般的な正規表現、文字(、エスケープを|使用してください。)だからあなたは使用する必要があります

$ grep "^ID.*\(ETS\|FBS\)" my_file.txt

使用時にエスケープは必要ありません。拡張正規表現-E)オプション。man grep「」セクションを参照してくださいBasic vs Extended Regular Expressions

答え2

|複数のブランチ(as)を使用する場合は、or互換性を高めるために「最新のRE」を使用すると明示的に言うことをお勧めします。むしろ。

これを行うには、次を使用します。grep -E:

grep -E "^ID.*(ETS|FBS)" my_file.txt

RE、ERE、および「最新の」ERストーリーの詳細については、を参照してくださいman 7 regex

egrepまたは代わりに使用できますが、grep次から読むことができますman grep

egrep は grep -E と同じです。 fgrep は grep -F と同じです。

(...)

次に直接電話してください。エグレフまたはfgrepはい廃止

関連情報