Jadi ketika saya menjalankan ini di Fedora saya melihat ini:
$ 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
Tetapi ketika saya menjalankan di Ubuntu (data yang sama) saya tidak mendapatkan hasil dari 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'
Ada ide apa yang bisa terjadi? Bagaimana saya bisa menemukan sesuatu yang akan bekerja sama pada kedua sistem?
ls *-ref.alleles
?Jawaban:
setara dengan:
(tidak ada karakter di antara tanda kutip yang merupakan metakarakter shell, jadi mengutipnya tidak berpengaruh.)
Ini pada gilirannya setara dengan:
oleh parsing normal dari
-
opsi yang diawali. The-e
pilihan membawa argumen, tetapi-F
dan-r
tidak.Karena Anda tidak menentukan file apa saja untuk di-grep, perilaku default adalah untuk bertindak pada stdin ... kecuali bahwa
-r
opsi itu tidak masuk akal sehingga defaultnya untuk mencari.
(direktori saat ini) secara rekursif sebagai gantinya dan mengabaikan stdin. Dalam beberapa versi.Anda perlu menggunakan
--
indikator "tidak ada lagi opsi" sebelum regexp yang dimulai dengan-
seperti padaSaya melacak titik di mana perilaku
-r
tanpa argumen file berubah. Itu dalam versi 2.11, dirilis 2 Maret 2012. Lihat pengumuman rilis.Komit git yang mempengaruhi perilaku adalah ini dan ini .
Jika Anda menjalankan
grep --version
dua mesin Anda, saya yakin Anda akan menemukan bahwa salah satu dari mereka berada di sisi yang salah dari 2.11sumber
Yang memimpin
-
adalah masalahnya. Untuk mendapatkan hasil yang sama tambahkan--
:Dari
man bash
:sumber
--
pada baris perintah bash sendiri, yang independen dari pemahaman grep--
. Mereka bekerja dengan cara yang sama karena itu adalah konvensi umum, tetapi secara umum halaman manual shell Anda tidak memberi tahu Anda apa pun tentang arti argumen untuk program lain.Periksa .bashrc jika ada alias pada perintah grep Anda yang mengabaikan perilaku itu. Mungkin itu masalahnya. Coba juga grep tanpa param "-F".
sumber