Wenn ich das in Fedora starte, sehe ich folgendes:
$ 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
Aber wenn ich auf Ubuntu (gleiche Daten) laufe, bekomme ich keine Ergebnisse von der 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'
Irgendwelche Ideen, was los sein könnte? Wie kann ich etwas finden, das auf beiden Systemen gleich funktioniert?
ls *-ref.alleles
?Antworten:
ist äquivalent zu:
(Keines der Zeichen zwischen den Apostrophen ist ein Shell-Metazeichen. Daher hat das Zitieren keinen Effekt.)
Dies entspricht wiederum:
durch normales Parsen von
-
vorangestellten Optionen. Die-e
Option akzeptiert ein Argument, aber-F
und-r
nicht.Da Sie keine Dateien für grep angegeben haben, ist das Standardverhalten, auf stdin zu reagieren ... mit der Ausnahme, dass die
-r
Option keinen Sinn macht.
und stattdessen standardmäßig rekursiv nach (dem aktuellen Verzeichnis) sucht und stdin ignoriert. In einigen Versionen.Sie müssen den
--
Indikator "keine weiteren Optionen" verwenden, bevor ein regulärer Ausdruck mit "-
wie in " beginntIch habe den Punkt aufgespürt, an dem sich das Verhalten
-r
ohne Dateiargumente geändert hat. Es war in der Version 2.11, die am 2. März 2012 veröffentlicht wurde. Siehe Ankündigung der Veröffentlichung.Die Git-Commits, die das Verhalten beeinflusst haben, sind dieses und dieses .
Wenn Sie
grep --version
auf Ihren beiden Rechnern laufen , werden Sie sicher feststellen, dass sich einer von ihnen auf der falschen Seite von 2.11 befindetquelle
Die Führung
-
ist das Problem. Um die gleichen Ergebnisse zu erhalten, fügen Sie Folgendes hinzu--
:Von
man bash
:quelle
--
auf Bashs eigener Kommandozeile, die unabhängig von Greps Verständnis von ist--
. Sie funktionieren auf die gleiche Weise, da dies eine übliche Konvention ist, aber im Allgemeinen sagt Ihnen die Manpage Ihrer Shell nichts über die Bedeutung von Argumenten für andere Programme aus.Überprüfen Sie .bashrc, ob Ihr grep-Befehl Aliase enthält, die dessen Verhalten außer Kraft setzen. Vielleicht ist es das Problem. Versuchen Sie auch grep ohne den Parameter "-F".
quelle