
Kann jemand erklären, warum das nicht funktioniert?
grep -ne '[A-Za-z]{1,30}\ [A-Z][a-z]{1,30}\W[A-Za-z]{1,30}\ [0-9]{1,30}\W[0-9]{5}\ [A-Za-z]{1,30}(\ [A-Za-z]{1,30})?' emails
Antwort1
Erstens verwenden Sie erweiterte reguläre Ausdrücke (ERE) wie {}
, ()
und ?
. Fügen Sie die Option -E
zur Verwendung von ERE hinzu oder verwenden Sie Escape {}
und ()
mit Backslashs und Ersetzungen ?
wie folgt:grep -ne '[A-Za-z]\{1,30\} [A-Z][a-z]\{1,30\}\W[A-Za-z]\{1,30\} [0-9]\{1,30\}\W[0-9]\{5\} [A-Za-z]\{1,30\}\( [A-Za-z]\{1,30\}\)\{0,1\}' emails
Zweitens maskieren Sie Leerzeichen mit Backslashs in einfachen Anführungszeichen. Während die meisten Implementierungen grep
dies als einfache Leerzeichen behandeln, betrachtet der POSIX-Standard dies als undefiniert:Die Interpretation eines gewöhnlichen Zeichens, dem ein Backslash ( '\' ) vorangestellt ist, ist undefiniert.
Möglicherweise gibt es noch weitere Probleme, aber wir können das nicht wissen, ohne die Syntax Ihrer Datei zu kennen und zu wissen, was Siegrep