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