したがって、単語の先頭を特定の文字と一致させるには、\<
ex、を使用できることがわかります\<Aa
。その逆の場合も同様です。単語の終わりの場合\>
。これら2つのコマンドをどのように組み合わせますか?
たとえば、これを行うと、その\<Aag\>
単語だけが一致します。これら2つのコマンドを分離する方法はありますか?
答え1
\<
および演算子は、存在する場合とない場合の一部の実装で拡張として見つかる\>
いくつかの非標準正規表現演算子です。grep
-E
ほとんどの実装では、単語以外の文字(またはトピックの始まり)と単語文字の間の境界と、単語文字と単語以外の文字(またはトピックの終わり)との境界で一致します。ここで、単語文字は英数字または下線です。
一部のgrep
/regexp実装には、代わりに、[[:<:]]
および[[:>:]]
一部の実装には\b
2つのタイプのうちの1つと一致する境界があります(perlから)。
これらのうちの1つをサポートしている人は通常、単語一致-w
オプションもサポートしています。
\<Aag\>
内部一致は、との間foo-Aag
の一致\<
、項目(項目がある行)の間の一致です。-
A
\>
g
grep
一部のgrep
実装では、\w
単一の単語文字の一致もサポートしています。したがって、Aa
で始まり終わる単語を見つけるには、対応する標準単語を使用できるため、g
移植性は少し優れています。一部の実装では、またはその項目が必要な場合があります。\<Aa\w*g\>
\w
[[:alnum:]_]
\<Aa[[:alnum:]_]*g\>
\bAa[[:alnum:]_]*g\b
[[:<:]]
[[:>:]]
標準では、以下をgrep
使用できます。
grep -E '(^|[^[:alnum:]_)Aa[[:alnum:]_]*g([^[:alnum:]_]|$)'
または:
grep -x '\(.*[^[:alnum:]_]\)\{0,1\}Aa[[:alnum:]_]*g\([^[:alnum:]_].*\)\{0,1\}'
デフォルトのBREを使用してください。
Perl正規表現をgrep
サポートする場合-P
grep -P '\bAa\w*g\b'
または:
grep -Pw 'Aa\w*g'
動作します。それとも実際を使うこともできます:
perl -ne 'print if /\bAa\w*g\b/'
(ただし、デフォルトでは\w
ASCII文字のみが一致することに注意してください。)