grep: Ungültiger Rückverweis für Datumsausdruck in tcsh

1450
Ogre Psalm33

Ich googelte nach dem folgenden Fehler und erhielt keine großartigen Erklärungen, was mit grep unter tcsh los war. (Ja, dieser Datumsausdruck ist in den Protokolldateien vorhanden.)

$ grep '2014-07-21' *.log grep: Invalid back reference 

Seltsamerweise funktioniert der Befehl gut, wenn ich zu Bash wechsle (das ist meine aktuelle Problemumgehung). Weiß jemand, was hier los ist?

Da wird jemand fragen, hier sind die Ergebnisse von whichund alias:

$ which grep /bin/grep  $ alias grep $ # (Nothing) 

Dies läuft auf RHEL 5.4 (Red Hat).

0
Es sieht so aus, als würde ** tcsh ** Text mit einfachen Anführungszeichen vor jedem Zeichen mit einem Schrägstrich in nicht zitierten Text erweitern, in Ihrem Fall ** \ 2 \ 0 \ 1 \ 4 \ - \ 0 \ 7 \ - \ 2 \ 1 **. ** grep ** interpretiert \ als beleidigende Rückreferenz. Der Befehl sollte ohne die Anführungszeichen, die für Ihre Suche unnötig sind, in Ordnung sein. ** bash ** gibt den gleichen Fehler aus, wenn Sie sowohl die Anführungszeichen als auch die Back-Slashes verwenden. Beachten Sie, dass ich auf diese Schlussfolgerung geschlossen habe, aber ich habe ** tcsh ** nicht geladen, um sie zu bestätigen. AFH vor 9 Jahren 0
In der Tat funktioniert das Abnehmen der Zitate! Interessant. Wenn mein grep jedoch etwas komplizierter war, als: `grep -P" 2014-07- \ d * "` `, dann zwingt mich tcsh zur Verwendung von Anführungszeichen, und es funktioniert wieder. Sehr neugierig. Ogre Psalm33 vor 9 Jahren 0
Ich kann nur vermuten, wie ** tcsh ** mit Anführungszeichen umgehen könnte, aber Ihre ursprüngliche Suche könnte damit gut funktionieren. AFH vor 9 Jahren 0
@AFH - Endlich gefunden! Es ist ein RedHat 5.4-Fehler, der mit fehlerhaftem Glob-Matching zusammenhängt (zB '* .log'). Ogre Psalm33 vor 9 Jahren 0

1 Antwort auf die Frage

0
Ogre Psalm33

Dies ist offensichtlich ein bekannter Fehler in Tcsh in der jeweiligen Version von Tcsh und RedHat, die ich verwende. Offenbar gibt es für dieses Problem eine gepatchte Version von tcsh, wie in dieser Fehlermeldung beschrieben, für RedHat 5.4:

Expansion of multiple filename globs failed if any glob in a command line expression failed. The correct behavior outlines that a glob command should only fail if all components of the command fail. This behavior is restored with this updated package. (BZ#529703) 

Ich habe überprüft, und ich habe tatsächlich die fehlerhafte Version von tcsh installiert, wie im obigen Fehlerbericht angegeben:

$ rpm -qa tcsh tcsh-6.14-14.el5_4.2 

Offensichtlich hat die IT-Abteilung meines Unternehmens diesen tcsh-Patch noch nicht installiert (obwohl ich kürzlich erfahren habe, dass wir bald ein Upgrade auf RedHat EL 6.x durchführen werden).