次の単語を検索する必要があります。
ABC-DEF
AB2-DEF
AB3-DEF
AB-DEF
だから私は努力しています:
grep AB*-DEF
grep -w -AB*-DEF
grep -w AB*DEF
しかし、それらのどれも職業を持っていません。
答え1
*
正規表現の内容はファイル名 glob とは異なります。ゼロ個以上の前の文字/パターンを示します。したがって、あなたの例はA
0以上を探します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.*-DEF
orをAB.*DEF
使用すると、grep
予期しない文字列が貪欲に一致します。たとえば、次のようになります。
ABCG-DEF
ABCGLHHJKH90-DEF
答え3
あなたはそれを使用することができます:
grep 'AB.*-DEF' file.txt
答え4
正規表現のワイルドカード文字はシェルによって拡張されます。シェルはそれをファイル名メタ文字として扱います。だからシェルに話す必要がありますいいえこれをファイル名メタ文字として評価し、メタ文字の前に一重引用符、二重引用符、またはバックスラッシュ文字を使用して引用することによってこれを行います。その後、シェルは式自体をgrep
正規表現を処理するユーティリティに送信します。