Gwiazdka to tylko repetition operator, ale musisz powiedzieć, co powtarzasz. /*abc*/
dopasowuje ciąg zawierający ab i zero lub więcej c (ponieważ drugi * jest na c, pierwszy jest bez znaczenia, ponieważ nie ma co go powtarzać). Jeśli chcesz cokolwiek dopasować, musisz powiedzieć .*
- kropka oznacza dowolną postać (within certain guidelines). Jeśli chcesz tylko dopasować abc, możesz po prostu powiedzieć grep 'abc' myFile
. Dla bardziej złożonego dopasowania musisz użyć .*
- grep 'abc.*def' myFile
dopasować ciąg znaków, który zawiera abc, a następnie def z czymś opcjonalnym pomiędzy.
Aktualizacja oparta na komentarz:
*
w wyrażeniu regularnym nie jest dokładnie taka sama jak * w konsoli. W konsoli * jest częścią glob construct i działa jak symbol wieloznaczny (na przykład ls *.log
wyświetli listę wszystkich plików, które kończą się .log). Jednak w wyrażeniach regularnych * jest modyfikatorem, co oznacza, że dotyczy tylko poprzedzającej go postaci lub grupy. Jeśli chcesz, aby * w wyrażeniach regularnych działało jako symbol wieloznaczny, musisz użyć .*
jak wcześniej wspomniano - kropka jest znakiem wieloznacznym, a gwiazda podczas modyfikowania kropki oznacza znalezienie jednej lub więcej kropek; to znaczy. znajdź jedną lub więcej dowolnych postaci.
grep sama robi” t obsługuje znaki wieloznaczne na większości platform. Musisz użyć egrep, aby użyć symboli wieloznacznych. Muszle mają inną składnię. "*" w powłoce to. W egrep jest operatorem, który mówi "0 do wielu poprzednich jednostek". W grep jest to zwykła postać. –
PanCrit
@PanCrit: '*' oznacza to samo w grep i egrep: jest to * kwantyfikator * oznaczający zero lub więcej z poprzedniego atomu. To zupełnie inna koncepcja niż * symbole wieloznaczne * używane przez powłokę. –