私は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はい廃止