
私はカラットが」行の始まり「拡張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:]*h
0を含む複数回発生し、続いています。これは文字列とよく一致しますが、実行すると空白ではなくとのみ一致することがわかります。:
s
p
a
c
e
h
grep -o
h
最初にキャレットを追加すると、その文字の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
(マイハイライト)がこれについて説明します。
最後に、特定の名前付き文字クラスが事前定義されています。かっこ内の表現[...]このクラス名の角括弧は記号名の一部です。括弧に加えて、以下も含める必要があります。角かっこ表現を区切ります。