1つのファイルから2つの異なる一致の結果を返す必要があります。
grep "string1" my.file
my.fileのstring1の単一インスタンスを正しく返します
grep "string2" my.file
my.fileのstring2の単一インスタンスを正しく返します
しかし
grep "string1|string2" my.file
何も返さない
正規表現テストアプリでは構文が正しいので、cygwinのgrepで機能しないのはなぜですか?
基本的な正規表現でエスケープせずに|
文字を使用すると、|
リテラルのみが一致します。たとえば、内容のあるファイルがある場合
string1
string2
string1|string2
grep "string1|string2" my.file
を使用すると、最後の行のみが一致します
$ grep "string1|string2" my.file
string1|string2
代替演算子|
を使用するには、次のようにします。
基本的な正規表現(ちょうどgrep
)を使用し、正規表現の|
文字をエスケープします
grep "string1\|string2" my.file
Julianが his answer で既に指摘したように、egrep
またはgrep -E
で拡張正規表現を使用します
grep -E "string1|string2" my.file
照合するパターンが2つある場合は、-e
オプションでそれらを個別に指定することもできます。
grep -e "string1" -e "string2" my.file
grep
リファレンスの次のセクションが役立つ場合があります。
-e
egrep
またはgrep -E
を使用する必要がある場合があります。パイプORシンボルは「拡張」grepの一部であり、基本的なCygwin grepではサポートされない場合があります。
また、おそらくパイプ記号をエスケープする必要があります。
私が見つけた最良かつ最も明確な方法は次のとおりです:grep -e REG1 -e REG2 -e REG _FILETOGREP_
パイプを使用することはあまりありませんが、作業するのは非常に厄介です。
この情報は、「man grep」を実行することで見つけることができるgrep(1)というすばらしいマニュアルを読むことで見つけることができます。 grepとegrepの違い、基本的な表現と正規表現、およびgrepに関するその他の多くの有用な情報について説明します。