Назад | Перейти на главную страницу

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'

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

grep -F '-ref.alleles'

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

grep -F -ref.alleles

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

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

grep -F -r -e f.alleles

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

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

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

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".