ls

2013-03-11 19 views
27

ile düzenli İfade kullanımı ls .+\..+ gibi ls ile ER (Genişletilmiş Düzenli İfadeler) kullanmayı deniyorum.ls

Bir uzantı içeren tüm dosyaları yazdırmaya çalışıyorum (ls *.* kullanmış olabileceğimi biliyorum, ancak ER'yi kullanmayı denemek istedim).

Bu kodu çalıştırdığımda şu hatayı alıyorum: ls: .+..+: No such file or directory.

+5

Sana kafa karıştırıcı RE'lerı ve kabuk joker olduğunu düşünüyorum: Bash

yeni versiyonları Normal ifade operatörü, =~ var. Cevap ayrıca ne kullanacağınıza bağlı olacaktır. – Madbreaks

+1

Yani RE'yi ls içinde kullanamıyorum? –

+2

ls için standart dışı bir komut dosyası kullanmıyorsanız, reesks almaz. Ayrıca, os, komutunuza geçmeden önce * gibi özel joker karakterleri işleyecektir. Bunun yerine 'find' kullanmayı deneyin – GetSet

cevap

57

Düzenli ifadeyi shell globbing ile karıştırıyorsunuz. *

$ ls | egrep '.+\..+' 
+1

Anladım. Bu yüzden, öncelikle, kullanmaya çalıştığım şeyin RE'yi kabul edip etmediğini kontrol etmek zorundayım. –

+2

Eğer model sadece "globbing" ile eşleştirilemezse, alternatif bir yöntem kullanmanız gerekecektir. * F.Y.I * “find” aracı regexp eşleştirmeyi destekler. –

3

Sen kullandığınız kabuk ne olduğunu söylemek yok ama ortak olmasına rağmen genellikle, bu şekilde normal ifadeleri desteklemez: Eğer dosya adlarını maç için düzenli ifade kullanmak istiyorsanız yapabileceğin nix CLI araçları (grep, sed, vb) yapar. Bash gibi kabukları desteği ne yapıyoruz

bazı benzer karakterler (örneğin *) kullanır ama aynı şey değildir globbing vardır.

for x in `ls`; do 
    if [[ $x =~ .+\..* ]]; then 
     echo $x; 
    fi; 
done 
+1

Serin! Bunu hiç duymadım! :) Yani sadece '= ~' kullanın ve tercüman eşleştirmeye çalıştığım şeyin bir RE olduğunu anlayacaktır? –

+3

Bir * test * bağlamında kullanmak zorundasınız, ben çift köşeli parantezler olduğuna inanıyorum, bu nedenle (e) grep aracılığıyla bu özel durum boruları için çok daha basittir. Ama hakkında bilmek yararlıdır. – delicateLatticeworkFever

+1

Yardımlarınız için çok teşekkürler! Bu ipucu hatırlayacağım! ;) –

İlgili konular