Вопрос знатокам шелла
9/8/08 00:45Вот типа поиск:
gfind . -name "*.php*" | xargs grep --files-with-matches --extended-regexp '(@)?(shell_)?exec'
Теперь надо добавить в начало регэкса пробел или табуляцию, а в конец - {0,1} пробелов и открывающую круглую скобку.
Вопрос: какого органа не работает отэто?
gfind . -name "*.php*" | xargs grep --files-with-matches --extended-regexp '[\t ](@)?(shell_)?exec'
gfind . -name "*.php*" | xargs grep --files-with-matches --extended-regexp '(@)?(shell_)?exec ?\('
Пробовал цитировать бэкслэшем пробелы, кавычки, квадратные и круглые скобки... фиг там.
gfind . -name "*.php*" | xargs grep --files-with-matches --extended-regexp '(@)?(shell_)?exec'
Теперь надо добавить в начало регэкса пробел или табуляцию, а в конец - {0,1} пробелов и открывающую круглую скобку.
Вопрос: какого органа не работает отэто?
gfind . -name "*.php*" | xargs grep --files-with-matches --extended-regexp '[\t ](@)?(shell_)?exec'
gfind . -name "*.php*" | xargs grep --files-with-matches --extended-regexp '(@)?(shell_)?exec ?\('
Пробовал цитировать бэкслэшем пробелы, кавычки, квадратные и круглые скобки... фиг там.
(no subject)
9/8/08 21:15 (UTC)man 7 regex - наш общий друг :>
(no subject)
9/8/08 21:20 (UTC)Явно надо как-то по-другому цитировать спецсомволы в строках, но в мануалах я этого не нашёл.
Ходил, например, сюда: http://tldp.org/LDP/abs/html/index.html
Пользовать строки с двойной кавычкой не хочу, там надо будет все спецсимволы отцитировать неизвестным количеством бэкслэшей. Буэээ.
(no subject)
9/8/08 21:35 (UTC)Что за греп и какой версии?
У меня GNU grep 2.5.3 прекрасно ест оба варианта, которые в посте числятся как неработающие, и действительно по ним находит то, что нужно
Да, и \t он тоже замечательно понимает.
(no subject)
9/8/08 21:42 (UTC)Запускаю скрипт через bash -c, так что виндовый шелл мешаться не должен.
Значит, кривой порт. Спасибо, у меня не было юниха под рукой.
У меня они не работали с идиотскими ошибками вроде "unmatched [ or ^[" или "unmatched (".
Но побрюзжать я всё равно побрюзжу! Вон, sed 3.02 не понимает регэкспов. Даже нежадный match на нём не напишешь, не говоря о [:space:].
(no subject)
10/8/08 04:54 (UTC)Если решил выбрать GNU, так не застревай на старых версиях.
Испытывать на себе их недостатки - это пустая трата времени и сил :>
(no subject)
10/8/08 10:57 (UTC)Я не в теме.
Что это за конфликт такой?
(no subject)
12/8/08 06:00 (UTC)И наоборот, GNU предлагает в своих реализациях одноимённых POSIX-утилит много вкусных расширений и дополнений, и от версии к версии их набор только растёт. Но если у тебя традиционная система типа AIX/HP-UX/Solaris, обычно тебе приходится втаскивать на неё GNUшные утильки снаружи и прописывать их в PATH, чтоб перекрыть стандартные. GNU - это как бы практика. GNUшные утилиты весьма портабельны, их всегда можно забесплатно обновить до последней версии, но просто традиционные коммерческие unix-вендоры не включают их в свой комплект поставки по умолчанию.
Потому и приходится выбирать один из двух путей.