可能な一致を見つけようとしています。
ex****e
それでは、exで始まり、eで終わり、その間に4つの文字がある項目はどうなりますか?
ベストアンサー1
単一文字に一致する正規表現演算子はです.
。これは?
シェルのワイルドカードに似ています。*
それ自体は、正規表現の以前のコンテンツの数に関係なく(s(0を含む)の数a*
に関係なくa
)、シェルワイルドカードの文字数と一致します。
POSIXlyでx
eと正確に一致する行を見つけます。
grep -xE 'ex.{4}e'
または:
grep -x ex....e
または:
grep -x 'ex.\{4\}e'
二つ目は、最も携帯性の良いものです。grep '^ex....e$'
これはUnixバージョン4(1973)の元の実装でも機能しますが、-x
Unixバージョン7(1979)に追加され、一般化されたので信頼できます。
egrep
V7には拡張正規表現も追加されましたが、最初はインターバル{x,y}
演算子はありませんでした。この演算子が\{x,y\}
追加されましたが、以前のバージョンとの互換性が損なわれる可能性があるため、通常はgrep
追加されません。egrep
しかし、90年代初めに、POSIXは-E
機能をマージしてサポートを必要とするオプションを導入しましたが、今は廃止されました。grep
egrep
grep
{x,y}
egrep
ただし、まだ時々grep
サポートされていない実装-E
やSolarisなどのサポートされてegrep
いない実装(代わりに使用する必要がある)を見つけることができます。{x,y}
/bin/grep
/bin/egrep
/usr/xpg4/bin/grep
一部grep
の実装ではマルチバイトをサポートしていないため、正規表現.
演算子はマルチバイト文字(非ASCII UTF-8文字など)の任意のバイトと一致する可能性があります。
$ $ locale charmap
UTF-8
$ echo extrême | busybox grep -x ex....e
$ echo extrême | gnu-grep -x ex....e
extrême
$ echo extrême | busybox grep -x ex.....e
extrême
ê文字はUTF-8で2バイトで構成されているため、extrême
7文字ですが8バイトです。
$ printf %s extrême | wc -cm
7 8