Kiedy uruchamiam to w Fedorze, widzę to:
$ 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
Ale kiedy uruchamiam na Ubuntu (te same dane), nie otrzymuję żadnych wyników z 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'
Jakieś pomysły, co się dzieje? Jak mogę wymyślić coś, co będzie działać tak samo na obu systemach?
ls *-ref.alleles
?Odpowiedzi:
jest równa:
(żaden z znaków między apostrofami nie jest metaznakami powłoki, więc cytowanie ich nie ma żadnego efektu).
To z kolei odpowiada:
przez normalne parsowanie
-
prefiksowanych opcji.-e
Opcja wymaga argumentu, ale-F
i-r
nie.Ponieważ nie określiłeś żadnych plików do grep, domyślnym zachowaniem jest działanie na stdin ... z wyjątkiem tego, że
-r
opcja nie ma sensu, więc domyślnie przeszukuje.
(bieżący katalog) rekurencyjnie zamiast tego i ignoruje stdin. W niektórych wersjach.Musisz użyć wskaźnika
--
„więcej opcji” przed wyrażeniem regularnym rozpoczynającym się od-
jak wWyśledziłem punkt, w którym
-r
zmieniło się zachowanie bez argumentów pliku. To było w wersji 2.11, wydanej 2 marca 2012 r. Zobacz ogłoszenie o wydaniu.Zatwierdzenia git, które wpłynęły na zachowanie, są tym i tym .
Jeśli działasz
grep --version
na dwóch komputerach, jestem pewien, że zauważysz, że jedna z nich jest po niewłaściwej stronie 2.11źródło
Największy
-
jest problem. Aby uzyskać takie same wyniki, dodaj--
:Od
man bash
:źródło
--
linii poleceń bash, która jest niezależna od zrozumienia grepa--
. Działają w ten sam sposób, ponieważ jest to powszechna konwencja, ale ogólnie strona podręcznika twojej powłoki nie mówi ci nic o znaczeniu argumentów dla innych programów.Sprawdź .bashrc, czy w poleceniu grep są jakieś aliasy, które przesłaniają jego zachowanie. Może to jest problem. Spróbuj także grep bez parametru „-F”.
źródło