Yanıtlar:
Düzenli ifadeler ve dosya adı globbing çok farklı iki şeydir.
Metinde desen eşleşmesi için komutlarda / işlevlerde normal ifadeler kullanılır. Örneğin, model parametresinde grep
veya programlama dillerinde.
Dosya adı globbing, kabuklar tarafından joker karakterler kullanarak dosya ve dizin adlarını eşleştirmek için kullanılır. Globbing kabiliyeti kabuğa bağlıdır. Örneğin Bash, aşağıdaki joker karakterleri destekler:
*
0 veya daha fazla karakterle eşleş?
1 karakteri eşleştir[...]
belirtilen kümedeki bir karakterle eşleşBu joker karakterler düzenli ifadelere benzeyebilir, gerçekten [...]
de globbing ve regex'te aynı anlama sahiptir. Ama *
ve ?
globbing ve düzenli ifade içinde ortalama farklı şeyler.
Bir yorumda şunları yazdınız:
Peki tercüman farkı * şakacı mı yoksa regex mi? örneğin:
grep a*b a*.txt
?
Kolay. Bir çeşit.
Her şeyden önce, kabuk, joker karakterleri dosya adlarıyla eşleştirerek yorumlamaya çalışır. "A" ile başlayan ve "b" ile biten dosyalar varsa, kabuk a*b
eşleşen dosya adlarıyla değiştirilir . Aynı şey geçerli a*.txt
. Eşleşen dosya adı yoksa, kabuk argümanları oldukları grep
gibi geçirir.
Ancak, ilk parametresi grep
bir örüntü olmalıdır. Pratik kullanım örneklerinin% 99,999'unda ilk parametrenin kabuk tarafından yorumlanmasını istemezsiniz. Büyük olasılıkla niyet şuydu:
grep "a*b" a*.txt
Alıntılama a*b
sayesinde, kabuk globbing kullanarak yorumlamaz ve bunun yerine doğrudan iletir grep
. Buna karşılık, grep
bunu düzenli bir ifade olarak (tasarım gereği) yorumlayacaktır.
Özetlemek gerekirse, kabuk komut satırını joker karakterler kullanan kendi globbing dilini izleyerek yorumlar. Komutlar, programlar yazarları tarafından tasarlandıkları şekilde parametrelerini yorumlar.
Dosya adı sizin için bir dizeyse, dosya adları için de normal ifadeyi kullanabilirsiniz. Örneğin: normal ifadeyle eşleşen dosya adlarını bulmak istiyorsanız deneyebilirsiniz:
find ./ -regex '.*[abc][xyz].*'
Komut, adında a, b veya c ve ardından x, y veya z olan dosyaları arar. Bu sadece bir örnek. Sonsuz olasılıklar var.
find ./ -name 'a*'
joker karakter olarak * kullanırsınız. Eğer yazdığınızda find ./ -regex 'a*'
, bir regex * kullanın. Önemli fark anahtar -name
veya -regex
.