grep: Problem mit regulärem Ausdruck

grep: Problem mit regulärem Ausdruck

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 -Ezur 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 grepdies 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

verwandte Informationen