grepで動作しないファイルパスのワイルドカード

grepで動作しないファイルパスのワイルドカード

次の単語を検索する必要があります。

ABC-DEF
AB2-DEF
AB3-DEF
AB-DEF

だから私は努力しています:

grep AB*-DEF
grep -w -AB*-DEF
grep -w AB*DEF

しかし、それらのどれも職業を持っていません。

答え1

*正規表現の内容はファイル名 glob とは異なります。ゼロ個以上の前の文字/パターンを示します。したがって、あなたの例はA0以上を探しますB-DEF

.正規表現では「すべての文字」を意味するので、次のようにパターンを変更できます。

grep 'AB.*DEF'

答え2

パターンに関する限り、予想される文字列のみを一致させるのが最も安全です。

grep 'AB.\{0,1\}-DEF' file.txt

または

grep -E 'AB.?-DEF' file.txt

.単一文字と一致?し、\{0,1\}前のトークンと0回または1回一致するため、合計は前の0または1文字と一致します.?.\{0,1\}-DEF

AB.*-DEForをAB.*DEF使用すると、grep予期しない文字列が貪欲に一致します。たとえば、次のようになります。

ABCG-DEF
ABCGLHHJKH90-DEF

答え3

あなたはそれを使用することができます:

grep 'AB.*-DEF' file.txt

答え4

正規表現のワイルドカード文字はシェルによって拡張されます。シェルはそれをファイル名メタ文字として扱います。だからシェルに話す必要がありますいいえこれをファイル名メタ文字として評価し、メタ文字の前に一重引用符、二重引用符、またはバックスラッシュ文字を使用して引用することによってこれを行います。その後、シェルは式自体をgrep正規表現を処理するユーティリティに送信します。

関連情報