7桁の電話番号を検索するには、次のコマンドを使用します。
grep "[[:digit:]]\{3\}[ -]\?[[:digit:]]\{4\}" file
\?
何を表すか?
ベストアンサー1
他の多くの正規表現エンジンと同様に、?
「0以前のものと一致」を意味します。
あなたの例では、\?
に適用されます[ -]
。つまり、スペースまたはマイナス記号と一致しようとしますが、スペースまたはマイナス記号はオプションです。
したがって、次のいずれかが一致します。
555 1234
555-1234
5551234
以前のバージョンとの互換性のために書かれた\?
ものではありません?
。
元のバージョンでは、grep
「基本正規表現」という別のタイプの正規表現を使用していましたが、ここでは文字通り?
疑問符のみが表示されていました。
\?
彼らはGNU grepが0または1つの機能を持つようにこれを追加しましたが、使用されたスクリプトがまだ?
期待どおりに機能するように構文を使用する必要がありました。
grepには、-E
「拡張正規表現」というより一般的な型の正規表現を使用するオプションがあります。
man 1 grep
:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression
(ERE, see below). (-E is specified by POSIX.)
-G, --basic-regexp
Interpret PATTERN as a basic regular expression (BRE, see below).
This is the default.
...
Repetition
A regular expression may be followed by one of several repetition operators:
? The preceding item is optional and matched at most once.
...
grep understands three different versions of regular expression syntax:
“basic,” “extended” and “perl.”
...
Basic vs Extended Regular Expressions
In basic regular expressions the meta-characters ?, +, {, |, (, and )
lose their special meaning; instead use the backslashed versions
\?, \+, \{, \|, \(, and \).
追加情報:
grep -E
オプションとegrep
- GNU grep - 基本と拡張
- 正規表現構文の概要
- 正規表現 - Wikipedia
- いくつかの正規表現コマンドが他の文字に対して「\」を逆に解釈するのはなぜですか?