次のような単語をgrepする必要があります。
ABC-DEF
AB2-DEF
AB3-DEF
AB-DEF
だから私は試していました:
grep AB*-DEF
grep -w -AB*-DEF
grep -w AB*DEF
しかし、どちらも機能していません。
正規表現の*
は、ファイル名グロブのようなものではありません。前の文字/パターンの0以上を意味します。したがって、例ではA
を検索し、次に0以上のB
を検索し、次に-DEF
を検索します。
正規表現の.
は「任意の文字」を意味するため、次を使用してパターンを修正できます
grep 'AB.*DEF'
パターンに関する限り、これは意図された文字列のみに一致させるのが最も安全です。
grep 'AB.\{0,1\}-DEF' file.txt
または
grep -E 'AB.?-DEF' file.txt
.
は任意の1文字に一致し、?
および\{0,1\}
は前のトークンに0回または1回一致するため、合計で.?
および.\{0,1\}
は前の0文字または1文字に一致します-DEF
。
AB.*-DEF
またはAB.*DEF
を使用すると、grep
は意図しない文字列に貪欲に一致します。次に例を示します。
ABCG-DEF
ABCGLHHJKH90-DEF
以下を使用できます。
grep 'AB.*-DEF' file.txt
正規表現のワイルドカードは、シェルによって展開されます。シェルはそれらをファイル名のメタ文字として扱います。そのため、シェルにnotをファイル名のメタ文字として評価するように指示する必要があり、メタ文字の直前に一重引用符、二重引用符、またはバックスラッシュ文字を使用してそれらを引用します。次に、シェルは正規表現を処理するgrep
ユーティリティに正規表現を送信します。