grep ведет себя по-разному в Fedora против Ubuntu

Поэтому, когда я запускаю это в Fedora, я вижу это:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles

Но когда я работаю в Ubuntu (те же данные), я не получаю никаких результатов от grep:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'

Есть идеи, что может происходить? Как я могу придумать что-то, что будет работать одинаково в обеих системах?

3 ответа

Решение
grep -F '-ref.alleles'

эквивалентно:

grep -F -ref.alleles

(ни один из символов между апострофами не является метасимволами оболочки, поэтому цитирование их не имеет никакого эффекта.)

Это в свою очередь эквивалентно:

grep -F -r -e f.alleles

нормальным разбором - префиксные опции. -e опция принимает аргумент, но -F а также -r нет.

Поскольку вы не указали какие-либо файлы для grep, стандартным поведением является действие на стандартный ввод... за исключением того, что -r опция не имеет смысла, поэтому поиск по умолчанию . (текущий каталог) рекурсивно вместо этого и игнорирует стандартный ввод. В некоторых версиях.

Вам нужно использовать -- индикатор "больше никаких опций" перед регулярным выражением, начинающимся с - как в

grep -F -- -ref.alleles

Я выследил точку, где поведение -r без изменения аргументов файла. Это было в версии 2.11, выпущенной 2 марта 2012 года. См. Объявление о выпуске.

Git коммитов, которые повлияли на поведение, это этот и этот.

Если вы бежите grep --version на ваших двух машинах, я уверен, вы обнаружите, что один из них находится на неправильной стороне 2.11

Ведущий - это проблема. Чтобы получить те же результаты, добавьте --:

grep -F -- '-ref.alleles'

От man bash:

A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.

Проверьте.bashrc, есть ли в вашей команде grep псевдонимы, которые переопределяют ее поведение. Может быть, это проблема. Также попробуйте grep без параметра "-F".

Другие вопросы по тегам