Ich hatte den Eindruck, dass ein Caret-Symbol " Anfang der Zeile " mit erweiterten regulären POSIX-Ausdrücken bedeutet.
Wenn ich es damit benutze grep
, verhält es sich jedoch unerwartet.
Ich verwende GNU grep
2.5.4 unter Ubuntu 10.04 Lucid Lynx .
Ich spreche eine Zeile ' Hallo ' aus und leite sie dann an eine Zeile weiter, grep
die nach " null oder mehr Leerzeichen gefolgt vom Buchstaben h " sucht :
echo ' hello' | grep -E '[:space:]*h'
hello
grep
findet es ok
Wenn ich ein Caret hinzufüge, um anzuzeigen, dass das Muster nur mit " null oder mehr Leerzeichen gefolgt vom Buchstaben h am Anfang der Zeichenfolge " übereinstimmen soll :
echo ' hello' | grep -E '^[:space:]*h'
Es wurden keine Übereinstimmungen gefunden. Ich würde erwarten, dass die Zeichenfolge übereinstimmt, da sie mit Leerzeichen gefolgt von h beginnt .
Warum verhindert dieses Caret-Symbol eine Übereinstimmung?
quelle
Es wird davon ausgegangen, dass dies
[:space:]
nur in einem Klammerausdruck angezeigt wird (hervorgehobene Übereinstimmungen mit *):Dies wird durch den folgenden Ausschnitt aus
man grep
(meine Hervorhebung) erklärt:quelle