文字で始まり終わる単語を検索するgrepコマンド

文字で始まり終わる単語を検索するgrepコマンド

したがって、単語の先頭を特定の文字と一致させるには、\<ex、を使用できることがわかります\<Aa。その逆の場合も同様です。単語の終わりの場合\>。これら2つのコマンドをどのように組み合わせますか?

たとえば、これを行うと、その\<Aag\>単語だけが一致します。これら2つのコマンドを分離する方法はありますか?

答え1

\<および演算子は、存在する場合とない場合の一部の実装で拡張として見つかる\>いくつかの非標準正規表現演算子です。grep-E

ほとんどの実装では、単語以外の文字(またはトピックの始まり)と単語文字の間の境界と、単語文字と単語以外の文字(またはトピックの終わり)との境界で一致します。ここで、単語文字は英数字または下線です。

一部のgrep/regexp実装には、代わりに、[[:<:]]および[[:>:]]一部の実装には\b2つのタイプのうちの1つと一致する境界があります(perlから)。

これらのうちの1つをサポートしている人は通常、単語一致-wオプションもサポートしています。

\<Aag\>内部一致は、との間foo-Aagの一致\<、項目(項目がある行)の間の一致です。-A\>ggrep

一部の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/'

(ただし、デフォルトでは\wASCII文字のみが一致することに注意してください。)

関連情報