grep: неверная обратная ссылка для выражения даты в tcsh

1422
Ogre Psalm33

Я погуглил следующую ошибку и не получил каких-либо хороших объяснений того, что происходит с grep под tcsh. (Да, это выражение даты существует в файлах журнала).

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

Любопытно, что если я переключаюсь на bash, команда работает нормально (это мой текущий обходной путь). Кто-нибудь знает, что здесь происходит?

Потому что кто-то спросит, вот результаты whichи alias:

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

Это работает на RHEL 5.4 (Red Hat).

0
Похоже, что ** tcsh ** расширяет текст в одинарных кавычках в текст без кавычек с обратной косой чертой перед каждым символом, в вашем случае ** \ 2 \ 0 \ 1 \ 4 \ - \ 0 \ 7 \ - \ 2 \ 1 **. ** grep ** интерпретирует \ как обратную ссылку. Команда должна быть в порядке без кавычек, которые не нужны для вашего сильного поиска. ** bash ** выдает ту же ошибку, если вы используете как кавычки, так и обратную косую черту. Обратите внимание, что я сделал этот вывод, но у меня не загружено ** tcsh ** для его подтверждения. AFH 10 лет назад 0
Действительно, снятие цитат работает! Интересно. Однако, если мой grep был чем-то более сложным, например: `grep -P" 2014-07- \ d * "`, то tcsh возвращает меня к использованию кавычек, и это снова работает. Очень любопытный. Ogre Psalm33 10 лет назад 0
Я могу только догадываться, как ** tcsh ** может обрабатывать двойные кавычки, но ваш оригинальный поиск вполне может с ними работать. AFH 10 лет назад 0
@AFH - Наконец-то нашел! Это ошибка RedHat 5.4, связанная с ошибочным сопоставлением глобуса (например: '* .log'). Ogre Psalm33 10 лет назад 0

1 ответ на вопрос

0
Ogre Psalm33

This is apparently a known bug in Tcsh in the particular version of Tcsh and RedHat that I am using. Apparently there is a patched version of tcsh available for this issue, as described in this errata, for 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) 

I checked, and I do indeed have the buggy version of tcsh installed as noted in the bug report above:

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

Evidently the IT department for my company has not installed this tcsh patch yet (though I recently learned we'll soon be finally upgrading to RedHat EL 6.x).

Похожие вопросы