grep: riferimento indietro non valido per l'espressione della data in tcsh


0

Ho cercato su Google per il seguente errore e non ho avuto grandi spiegazioni su cosa stesse succedendo con grep sotto tcsh. (Sì, questa espressione di data esiste nei file di registro).

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

Curiosamente, se passo a bash, il comando funziona bene (questo è il mio attuale rimedio). Qualcuno sa cosa sta succedendo qui?

Perché qualcuno chiederà, ecco i risultati di whiche alias:

$ which grep
/bin/grep

$ alias grep
$               # (Nothing)

Questo è in esecuzione su RHEL 5.4 (Red Hat).


Sembra che tcsh espanda il testo a virgoletta singola in testo non quotato con una barra rovesciata prima di ogni carattere, nel tuo caso \ 2 \ 0 \ 1 \ 4 \ - \ 0 \ 7 \ - \ 2 \ 1 . grep interpreta \ {digit} come riferimento arretrato. Il comando dovrebbe essere OK senza virgolette, che non sono necessarie per la tua ricerca forte. bash dà lo stesso errore se usi sia le virgolette che le barre rovesciate. Nota che ho dedotto questa conclusione, ma non ho tcsh caricato per confermarlo.
AFH,

Anzi, togliere le citazioni funziona! Interessante. Tuttavia, se il mio grep era qualcosa di più complicato come grep -P "2014-07-\d*":, allora tcsh mi costringe a usare le virgolette e funziona di nuovo. Molto curioso.
Ogre Salmo33,

Posso solo immaginare come tcsh possa gestire le virgolette doppie, ma la tua ricerca originale potrebbe benissimo funzionare con loro.
AFH,

@AFH - Finalmente l'ho trovato! È un bug di RedHat 5.4 che ha a che fare con la corrispondenza glob buggy (cioè: '* .log').
Ogre Salmo33,

Risposte:


0

Questo è apparentemente un bug noto in Tcsh nella particolare versione di Tcsh e RedHat che sto usando. Apparentemente esiste una versione patchata di tcsh disponibile per questo problema, come descritto in questo errata , per 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)

Ho controllato e in effetti ho installato la versione con errori di tcsh come indicato nella segnalazione di bug sopra:

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

Evidentemente il dipartimento IT della mia azienda non ha ancora installato questa patch tcsh (anche se recentemente ho appreso che presto aggiorneremo a RedHat EL 6.x).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.