sadece aralarındaki temel farkların neler olduğunu bilmek ister misiniz? ve her dilin gücü (kullanmanın daha iyi olduğu yerlerde).
Düzenleme: "vs." değil konu gibi, sadece bilgi.
sadece aralarındaki temel farkların neler olduğunu bilmek ister misiniz? ve her dilin gücü (kullanmanın daha iyi olduğu yerlerde).
Düzenleme: "vs." değil konu gibi, sadece bilgi.
Yanıtlar:
Görünüş sırasına göre dillerdir sed
, awk
, perl
, python
.
sed
Program bir akış düzenleyici olup, giriş dosya veya dosyalar (çizgilerin belirtilen aralıklara, veya daha genel olarak), her hat için bir komut işlemleri uygulamak için tasarlanmıştır. Dili, ed
Unix editörüne dayanır ve şartlı olmasına rağmen, karmaşık görevler için çalışmak zordur. Bununla birlikte küçük mucizeler yaratabilirsiniz - ancak başınızdaki saçlara bir maliyetle. Ancak, görev alanı içindeki görevleri denerken muhtemelen programların en hızlısıdır. (Tartışılan programların en az güçlü düzenli ifadelerine sahiptir - birçok amaç için yeterlidir, ancak kesinlikle PCRE değil - Perl Uyumlu Düzenli İfadeler)
awk
Program (yazarlarının baş harflerini adı - Aho, Weinberger ve Kernighan) raporlarını biçimlendirme için başlangıçta bir araçtır. Çorba gibi kullanılabilir sed
; daha yeni sürümlerinde, hesaplama tamamlandı. İlginç bir fikir kullanıyor - program 'eşleşen modeller' ve 'desen eşleştiğinde alınan eylemlere' dayanıyor. Desenler oldukça güçlüdür (Genişletilmiş Düzenli İfadeler). Eylemlerin dili C'ye benzer. Temel özelliklerinden biri awk
, girdiyi otomatik olarak kayıtlara ve her kaydı alanlara ayırmasıdır.
Perl kısmen bir garip-katil ve sed-katil olarak yazılmıştır. Birlikte verilen programlardan ikisi a2p
ve betikleri ve betikleri Perl'e s2p
dönüştürmektir . Perl, yeni nesil kodlama dillerinin en eskilerinden biridir (Tcl / Tk muhtemelen öncelikli olduğunu iddia edebilir). Çok daha güçlü bir dille güçlü entegre düzenli ifade işleme özelliğine sahiptir. Neredeyse tüm sistem çağrılarına erişim sağlar ve CPAN modüllerinin genişletilebilirliğine sahiptir. (Ne genişletilebilir ne de .) Perl'in sloganlarından biri "TMTOWTDI - Bunu yapmanın birden fazla yolu var" ("tim-toady" olarak telaffuz edilir). Perl'in 'nesneleri' vardır, ancak dilin temel bir parçası olmaktan çok bir eklentidir.awk
sed
awk
sed
Python en son ve muhtemelen kısmen Perl'e tepki olarak yazılmıştır. Bazı ilginç sözdizimsel fikirleri vardır (seviyeleri belirtmek için girintileme - diş telleri veya eşdeğerleri yok). Perl'den daha temelde nesne yönelimlidir; Perl kadar genişletilebilir.
Tamam - ne zaman kullanılır?
Perl'in Python'un yapamayacağı hiçbir şeyin farkında değilim, ya da tam tersi. İkisi arasındaki seçim diğer faktörlere bağlı olacaktır. Perl'i bir Python olmadan önce öğrendim, bu yüzden kullanmaya eğilimliyim. Python daha az sözdizimine sahiptir ve genellikle öğrenilmesi biraz daha kolaydır. Perl 6, piyasaya çıktığında büyüleyici bir gelişme olacak.
(Özellikle Perl ve Python'un 'genel bakışlarının' acımasızca eksik olduğunu unutmayın; tüm kitaplar konuyla ilgili yazılabilir.)
awk
üzerinde sed
(her ikisi hala kullanımları vardır gerçi) öğrenmek için. Görevin boyutuna gelince: sed
bir seferde bir satır işlerken, satırdan satıra depolama olmadan en iyisidir. awk
genellikle tüm kaynaklardan toplanan verilerle ilişkilendirilebilir diziler oluşturmak için kullanılır; daha fazla bellek kullanır ve bu nedenle büyük veri kümelerinde olduğundan daha fazla sorunla karşılaşma olasılığı daha yüksektir sed
. tsawk
Bağlantı kurmadan önce duymadım . Bir görev çok fazla olduğunda Perl'e geri dönme eğilimindeyim (ancak Python ile daha iyisini yapabilirsiniz) awk
.
Birkaç düzine dilde ustalaştıktan sonra, S. Lott gibi insanlardan bıktınız (bu soruya tartışmalı cevabına bakın, cevapladıktan altı yıl sonra (+ 45 / -22) aşağı oyların neredeyse yarısı (+ 45 / -22).
Sed, son derece basit komut satırı boru hatları için en iyi araçtır. Bir sed ustanın elinde, keyfi karmaşıklığın bir defalık için uygundur, ancak çok basit ikame boru hatları hariç üretim kodunda kullanılmamalıdır. 'S / this / that /' gibi şeyler.
Gawk (GNU awk), yalnızca tek bir giriş kaynağı ve tek bir çıktı (veya sırayla birden fazla çıktı yazıldığında) karmaşık veri yeniden biçimlendirme için açık ara en iyi seçimdir. Çok sayıda gerçek dünya çalışması bu tanıma uyduğundan ve iyi bir programcı gawk'yi iki saat içinde öğrenebildiğinden, en iyi seçimdir. Bu gezegende, daha basit ve daha hızlı daha iyidir!
Çok karmaşık giriş / çıkış senaryolarınız olduğunda Perl veya Python, awk veya sed'in herhangi bir sürümünden çok daha iyidir. Sorun ne kadar karmaşıksa, bakım ve okunabilirlik açısından python'u o kadar iyi kullanırsınız. Bununla birlikte, iyi bir programcının herhangi bir dilde okunabilir kod yazabileceğini ve kötü bir programcının herhangi bir yararlı dilde sürdürülemez bok yazabileceğini unutmayın, bu nedenle perl veya python seçiminin, söz konusu programcı olması durumunda programcının tercihlerine güvenli bir şekilde bırakılabileceğini unutmayın. yetenekli ve zeki.
a?ⁿaⁿ
için a??ⁿaⁿ
Perl 5'te ⁿ
1.000.000'luk bir değerle iki saniyeden daha kısa sürede çalışır. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
Eğer naif olanı çalıştırırsanız ⁿ
sadece 25 saniyeden daha uzun bir süre alır . Fark etmeniz gereken şey Perl'in, eşleşen olanı değiştiren normal ifadenin içinde Perl koduna sahip olmanıza izin vermek de dahil olmak üzere daha hızlı olanlardan daha fazla regex özelliğine sahip olmasıdır. . İsterseniz, diğerlerinden biri için yerleşik olanı değiştiren bir modül uygulayabilirsiniz.
Sed'e tam teşekküllü bir programlama dili demezdim, metin dosyalarını programlı olarak düzenlemeyi amaçlayan dil yapılarına sahip bir akış düzenleyicisidir.
Awk genel amaçlı bir dilden biraz daha fazlasıdır, ancak yine de metin işleme için en uygunudur.
Perl ve Python tam teşekküllü genel amaçlı programlama dilleridir. Perl'in metin işlemede kökleri vardır ve bir dizi awk benzeri yapıya sahiptir (nette yüzen bir awk-perl betiği bile vardır). Perl ve Python arasında birçok fark var, en iyi bahsiniz muhtemelen her iki dilin özetlerini Wikipedia gibi bir şeyde okumak ve ne olduklarını iyi kavramaktır.
İlk olarak, "Perl, Python awk ve sed" listesinde iki alakasız şey var.
Şey 1 - basit metin düzenleme araçları.
sed. Bir dosyanın her satırını okuma ve inceleme fikri ile tanımlanan sabit, nispeten basit bir çalışma kapsamına sahiptir. sed özellikle okunabilir olacak şekilde tasarlanmamıştır. Çok küçük unix sunucularında çok küçük ve çok verimli olacak şekilde tasarlanmıştır.
awk. Biraz daha az sabit, daha az basit bir çalışma alanına sahiptir. Bununla birlikte, bir awk programının ana döngüsü, bir kaynak dosyanın satırlarının örtülü olarak okunmasıyla tanımlanır.
Bunlar "tam" programlama dilleri değildir. - Bazı çalışmalarla - awk içinde oldukça karmaşık programlar yazabilirsiniz, ancak hızla karmaşıklaşır ve okunması zorlaşır.
Şey 2 - genel amaçlı programlama dilleri. Bunlar, çok çeşitli ifade türlerine, çok sayıda yerleşik veri yapısına sahiptir ve bahsetmek için kablolu varsayımlar veya kısayollar yoktur.
Perl.
Python.
Ne zaman kullanılır?
sed. Asla. 32K'dan fazla belleğe sahip modern bilgisayar çağında gerçekten bir değeri yoktur. Perl veya Python aynı şeyleri daha net yapar.
awk. Asla. Sed gibi, daha erken bir bilgisayar çağını yansıtır. Bu dili korumak yerine (başarılı bir sistem için gerekli olan diğer tüm dillere ek olarak), her şeyi tek bir hoş dilde yapmak daha hoştur.
Perl. Her türlü programlama problemi. Aynı şeyi yapmanın birçok, çok yolunun olduğu serbest düşünme sözdizimini seviyorsanız, perl eğlencelidir.
Python. Her türlü programlama problemi. Daha az seçenek, daha az incelik ve (belki de) daha fazla netliğin olduğu oldukça sınırlı sözdizimini seviyorsanız. Python'un nesneye yönelik yapısı onu büyük ve karmaşık problemler için daha uygun hale getirir.
Arka plan - Sed ve awk'ı cehaletten kurtarmıyorum. 20 yılı aşkın bir süre önce awk öğrendim. Onunla birçok şey yaptım; çekirdek unix becerisi olarak öğretirdi. Perl'i yaklaşık 15 yıl önce öğrendim. Onunla birçok sofistike şey yaptım. Her ikisini de geride bıraktım çünkü Python'da aynı şeyleri yapabilirim - ve daha basit ve daha net.
Sed ve awk ile ikisi de yaş olmayan iki ciddi sorun var.
Uygulamalarının eksikliği. Sed ve awk'in yaptığı her şey Python veya Perl'de yapılabilir, genellikle daha basit ve bazen daha hızlıdır. Bir kabuk boru hattının çoklu işlemesi nedeniyle bazı performans avantajları vardır. Python, subprocess
bu avantajları kurtarmama izin veren bir modül sunuyor .
Başka bir dil öğrenme ihtiyacı. Python'da (veya Perl) bir şeyler yaparak uygulamanız daha az dile bağlıdır ve netlik artar.
Ne zaman kullanılır: awk - asla - S. Lott.
Sanırım S. Lott bu tavsiyeyle işareti hafifçe kaçırdı. Gerçek şu ki, Linux ve diğer UNIX ortamlarında awk, hızlı metin işlemleri için bash, sh ve ksh ile kullanılabilecek kullanışlı bir araçtır. Komut dosyası oluşturma fikri, bu aracı, o aracı bir araya getirerek sorununuzu çözmenizdir. Bu nedenle, yönetici komut dosyalarında, ls, grep, |, awk, zaman, ps vb. .
Örneğin ben paintball dişli malzemelerini yöneten ekibin bir üyesiyimdotcom. Bu e-ticaret sitesi LAMP yığınını temel alır. Çeşitli tedarikçilerden veri akışlarının arka uç veritabanına otomatik olarak işlenmesi ve normalleştirilmesi için, bash, perl, php ve hatta beklenti de dahil olmak üzere çok çeşitli komut dosyalarını kullanır ve koruruz. Her birinin mevcut modüllere ve API'ye dayanan güçlü yönleri vardır. Bash komut dosyalarında, awl kullanarak PERL'e geçmeye gerek kalmadan hızlı kalıp eşleşmesi ve kalıplar üzerinde uygun eylemler yapıyoruz. Ayrıca, iş parçacığında vurgulanmayan, işaret etmek istediğim bir şey, bu komut dosyalarının adil bir sayısının açık kaynaktan satın alınması veya elde edilmesidir. Senaryo Perl olarak geldiyse, Perl olarak devam ederiz; Senaryo Php olarak geldiyse, onu Php olarak koruyoruz; eğer bash olarak geldiyse, bash olarak koruyoruz;
ls
bunun yerine glob kullanın. Oku bunu.