可能な結果のためのGrep

可能な結果のためのGrep

可能な一致を見つけようとしています。

ex****e

それでは、exで始まり、eで終わり、その間に4つの文字がある項目はどうなりますか?

ベストアンサー1

単一文字に一致する正規表現演算子はです.。これは?シェルのワイルドカードに似ています。*それ自体は、正規表現の以前のコンテンツの数に関係なく(s(0を含む)の数a*に関係なくa)、シェルワイルドカードの文字数と一致します。

POSIXlyでxeと正確に一致する行を見つけます。

grep -xE 'ex.{4}e'

または:

grep -x ex....e

または:

grep -x 'ex.\{4\}e'

二つ目は、最も携帯性の良いものです。grep '^ex....e$'これはUnixバージョン4(1973)の元の実装でも機能しますが、-xUnixバージョン7(1979)に追加され、一般化されたので信頼できます。

egrepV7には拡張正規表現も追加されましたが、最初はインターバル{x,y}演算子はありませんでした。この演算子が\{x,y\}追加されましたが、以前のバージョンとの互換性が損なわれる可能性があるため、通常はgrep追加されません。egrepしかし、90年代初めに、POSIXは-E機能をマージしてサポートを必要とするオプションを導入しましたが、今は廃止されました。grepegrepgrep{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ême7文字ですが8バイトです。

$ printf %s extrême | wc -cm
      7       8

おすすめ記事