grep キャレットが効果がないようです。

grep キャレットが効果がないようです。

私はカラットが」行の始まり「拡張POSIX正規表現を使用します。

ところで使用してみるとgrep予期しない動作が発生します。

使っています牛に似た一種の栄養 grep 2.5.4存在するUbuntu 10.04ルシドリンス

私は文章を反響する」こんにちはその後、grep検索クエリにパイプを接続します。ゼロ個以上の空白文字の後に文字が続きます。時間":

echo ' hello' | grep -E '[:space:]*h'
hello

grep大丈夫です。

パターンだけをマッチさせたいことを示すためにカラットを追加すると、ゼロ個以上の空白文字の後に文字が続きます。時間文字列の先頭に":

echo ' hello' | grep -E '^[:space:]*h'

一致するものはありません。文字列が次から始まるので、一致したいです。スペース続いて時間

このカラットが一致を防ぐのはなぜですか?

答え1

別の括弧ペア内で使用する必要があるスペースを見つけるには、[:space:]次のようにします[[:space:]]。あなたは表現したいかもしれませんgrep -E '^[[:space:]]*h'

現在の失敗理由を説明してください。

現在の状態には、、、、、、などの文字を検索するための文字クラスが含まれています。ここでは、[:space:]*h0を含む複数回発生し、続いています。これは文字列とよく一致しますが、実行すると空白ではなくとのみ一致することがわかります。:spacehgrep -oh

最初にキャレットを追加すると、その文字の1つがh文字列の先頭にある必要がありますが、文字列の先頭にその文字の1つもないため、一致しません。

答え2

[:space:]角かっこ式内でのみ発生すると仮定するようです(*で強調表示された一致)。

echo 'hello' | grep -E '^[:space:]*h'
*h*ello
echo 'hello' | grep -E '[^[:space:]]*h'
*h*ello
echo ' hello' | grep -E '^[[:space:]]*h'
* h*ello

次のスニペットman grep(マイハイライト)がこれについて説明します。

最後に、特定の名前付き文字クラスが事前定義されています。かっこ内の表現[...]このクラス名の角括弧は記号名の一部です。括弧に加えて、以下も含める必要があります。角かっこ表現を区切ります。

関連情報