egrep regex -bash: Syntaxfehler in der Nähe von unerwartetem Token `('

egrep regex -bash: Syntaxfehler in der Nähe von unerwartetem Token `('

Die Verwendung von egrep von der Befehlszeile mit regulären Ausdrücken funktioniert nicht und ich erhalte den im Titel genannten Fehler.

egrep -rnw /var/log/usres/([a-z]+).([a-z]+)\/([a-z]+).conf/user.settings -e "pattern"

Ich habe den regulären Ausdruck bei überprüfthttps://regex101.com/r/pL5pW4/1und habe shellcheck.net verwendet und beide sagen, dass es keine Probleme gibt. Ich versuche, bestimmte Ordner wie folgt abzugleichen:

egrep -rnw /var/log/users/sd.dfr/test.conf/user.settings, so the 

„sd.dfr“ und „test“ in diesem Beispiel sind der Zweck des regulären Ausdrucks. Um alle Kombinationen darin mit Ordnerpfaden abzugleichen. Ich habe versucht, Anführungszeichen, Escapezeichen und doppelte Anführungszeichen zu verwenden. Warum funktioniert das nicht?

Antwort1

grepsucht nach regulären Ausdrückenim Inhaltvon Dateien. Es wird nicht gesucht nachDateien, deren Namen übereinstimmenreguläre Ausdrücke. (Verwenden Sie finddafür.) Außerdem wird die Liste der von Ihnen angegebenen Datei-/Verzeichnisnamen von der Shell interpretiert, bevor grep sie sieht. Die Shell gleicht Dateien mit Klumpenkeine regulären Ausdrücke.

Shell-Globs sind nicht so präzise wie reguläre Ausdrücke, aber Folgendes könnte für Sie gut genug funktionieren:

egrep -rnw /var/log/users/*.*/*.conf/user.settings -e "pattern"

Oder noch besser, weil egrepveraltet:

grep -Ernw /var/log/users/*.*/*.conf/user.settings -e "pattern"

verwandte Informationen