grep, Fedora vs Ubuntu'da farklı davranıyor


13

Yani bunu Fedora'da çalıştırdığımda bunu görüyorum:

$ 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

Ama Ubuntu (aynı veri) üzerinde çalıştırdığımda grep'ten herhangi bir sonuç alamıyorum:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'

Neler olabileceği hakkında bir fikrin var mı? Her iki sistemde de aynı şekilde çalışacak bir şeyi nasıl bulabilirim?


Nasıl ls *-ref.alleles?
glenn jackman

@glennjackman, bunu düşündüm ama birisi tam olarak bunu yaptı ve düzeltmeye çalıştığım bash betiğinde bu satırı yorumladı :-) Sadece bir sebepleri olduğunu varsayabilirim ...
Greg_the_Ant

Yanıtlar:


30
grep -F '-ref.alleles'

şuna eşittir:

grep -F -ref.alleles

(kesme işaretleri arasındaki karakterlerin hiçbiri kabuk metakarakterleri değildir, bu nedenle alıntı yapmanın bir etkisi yoktur.)

Bu da şuna eşdeğerdir:

grep -F -r -e f.alleles

-önceden eklenmiş seçeneklerin normal ayrıştırılması ile . -eSeçenek bir argüman alır, ancak -Fve -ryapamaz.

Grep için herhangi bir dosya belirtmediğiniz için, varsayılan davranış stdin ... üzerinde işlem yapmaktır, ancak -rseçenek anlamsızdır, bu nedenle .(geçerli dizin) özyinelemeli olarak yinelemeli olarak arama yapar ve stdin'i yok sayar. Bazı versiyonlarda.

Sen kullanmaya gerek --bir regexp'nin önce "hayır daha fazla seçenek" göstergesi olduğunu başlar ile -olduğu gibi

grep -F -- -ref.alleles

-rDosya argümanı olmadan davranışının değiştiği noktayı izledim . 2 Mart 2012'de yayınlanan 2.11 sürümündeydi. Yayın duyurusuna bakın.

Davranışı etkilenen git kaydedilmesini olan bu ve bu bir .

Eğer çalıştırırsanız grep --versionsizin iki makinede, ben onlardan biri 2.11 yanlış tarafında olduğunu göreceksiniz eminim


Harika cevap, davranışın değiştiği versiyona kadar araştırma için teşekkürler.
richardneish

2
vay teşekkürler. Haklısın, grep 2.6.3'e karşı grep 2.14 var.
Greg_the_Ant

6

Öncü -sorun. Aynı sonuçları almak için şunu ekleyin --:

grep -F -- '-ref.alleles'

Gönderen man bash:

A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.

1
Ubuntu ve Fedora'da neden farklı? Her ikisinde de aynı olumsuz sonucu vermemeli midir?
Glueon

Teşekkürler. Bu komut başka bir komuta dönüştürülecekse, - orada sorunlara neden olur mu? Yoksa sadece göründüğü komuta uygulanır mı?
Greg_the_Ant

4
Bash man sayfası gerçekten alakalı değil. --Grep'in anlayışından bağımsız olan bash'ın kendi komut satırındaki muameleyi açıklar --. Aynı şekilde çalışırlar, çünkü bu yaygın bir kuraldır, ancak genel olarak kabuğunuzun man sayfası size diğer programlara yönelik argümanların anlamı hakkında hiçbir şey söylemez.

1

Grep komutunuzda davranışını geçersiz kılan diğer takma adlar olup olmadığını kontrol edin. Belki de sorun budur. Ayrıca "-F" parametresi olmadan grep'i deneyin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.