
Lesley Fowler
0
856
129
En çok cezalandırılmayan Linux araçlarından ikisi Sed ve Awk. Kuşkusuz onlar biraz arcane gibi görünse de, büyük kod veya metin parçalarında tekrarlayan değişiklikler yapmanız gerekiyorsa veya bir metni analiz etmek zorunda kalırsanız, Sed ve Awk paha biçilmezdir..
Peki onlar ne? Nasıl kullanılırlar? Ve nasıl bir araya getirildiklerinde metnin işlenmesini nasıl kolaylaştırırlar??
Sed nedir?
Sed, 1971 yılında efsanevi bilgisayar öncüsü Lee E. McMahon tarafından Bell Laboratuarlarında geliştirildi..
İsim için duruyor akış düzenleyici, ve bu böyle yapar. Gövdeleri veya metin akışlarını düzenlemenizi sağlar programlı, Kompakt ve basit, ancak Turing-komple bir programlama dili aracılığıyla.
Çalışma şekli basittir: metni bir satır satır arabellek okur. Her satır için, uygun olan yerlerde önceden tanımlanmış talimatları uygular..
Örneğin, birisi sözcüğü değiştiren bir Sed komut dosyası yazacaksa “bira” ile “soda”, ve ardından, sözlerinin tamamını içeren bir metin dosyasında geçirilir. “Duvardaki 99 şişe bira”, o dosyayı satır bazında geçirir ve yazdırırdı. “Duvardaki 99 Şişe Soda”, ve bunun gibi.
En temel Sed senaryosu, bir Merhaba Dünya'dır. Burada sadece dizge çıktı veren Unix Echo yardımcı programını kullanıyoruz. “Selam Dünya”. Ama bunu Sed'e aktarıyoruz ve değiştirmesini söylüyoruz. “Dünya” ile”Dave”. Kendini açıklayıcı şeyler.
yankı "Merhaba Dünya" | sed s / dünya / Dave
Daha karmaşık bir düzenleme yapmanız gerekirse, Sed komutlarını dosyalarda da birleştirebilirsiniz. Bu komik Reddit ipliğinden esinlenerek şarkı sözlerini A-Ha'nın şarkısına götüreceğim. Beni al, ve her örneğini değiştirin “ben”, “Ben mi”, ve “Benim”, Greg ile.
İlk önce, sözleri şarkıya adı verilen bir metin dosyasına koyacağım. tom.txt. Ardından tercih edilen metin editörümü açacağım (en sevdiğim Vim: Vim Metin Düzenleyicisine Şans Vermek İçin En İyi 7 Neden Vim Metin Düzenleyicisine Şans Vermek İçin En İyi 7 Sebep Yıllar sonra, bir metin editörü denedim başka bir isim verin, denedim, bu editörlerin her birini iki aydan fazla bir süredir birincil günlük editörüm olarak kullandım .. Her nasılsa, ben… ama Nano nano vs. vim: Terminal Metin Editörleri nano vs. vim: Terminal Metin Düzenleyicileri Karşılaştırıldı Linux, Terminal'i kullanmak zorunda kalmadan pratik olarak herkesin kullanması için yeterince kolay hale gelse de, düzenli olarak kullanan veya birisinin nasıl kontrol edebileceğini merak eden birileri var… ve Gedit gedit: One En Dolu Düz Metin Düzenleyicilerinden [Linux ve Windows] gedit: En Dolu Düz Metin Düzenleyicilerinden [Linux ve Windows] gedit: Düz metin editörlerinden birini düşündüğünüzde, aklınıza gelebilecek ilk şey Windows 'Not Defteri Uygulaması: Tam olarak ne iş tanımı yapıyor mu? ateş - düz metin için sade özellikler… her ikisi de mükemmel seçeneklerdir) ve aşağıdaki satırları ekleyin. Oluşturduğunuz dosyanın sonunun geldiğinden emin olun .sed.
Yukarıdaki örnekte kendimi tekrarladığımı fark edebilirsiniz (örneğin, s / me / Greg / ve s / Me / Greg /). Çünkü Mac OS X ile birlikte gelenler gibi bazı Sed sürümleri kullanıyor değil büyük / küçük harf duyarlı eşleşmeyi destekler. Sonuç olarak, her kelime için iki Sed talimat yazmamız gerekiyor, bu yüzden büyük harf ve büyük harf olmayan sürümü tanır..
Her örneğini değiştirmişsiniz gibi bu mükemmel bir şekilde çalışmaz. “ben”, “Ben mi”, ve “Benim” El ile Unutmayın, bunu yalnızca Sed komutlarını tek bir komut dosyasında nasıl gruplayabileceğinizi göstermek için bir alıştırma olarak kullanıyoruz ve ardından bunları tek bir komutla yürütüyoruz..
O zaman dosyayı çağırmamız gerekiyor. Bunu yapmak için bu komutu çalıştırıyoruz..
kedi tom.txt | sed -f greg.sed
Yavaşlayalım ve bunun ne olduğuna bakalım. Kartal gözlü okuyucular değil Echo'yu burada kullanarak. Cat kullanıyoruz. Bunun nedeni, Cat dosyanın tüm içeriğini yazdıracak olmasına rağmen, echo yalnızca dosya adını yazdıracaktır. Ayrıca, Sed ile koştuğumuzu da fark etmişsinizdir. “-f” bayrağı. Bu, betiği bir dosya olarak açmasını söyler..
Sonuç budur.
Sed'in düzenli ifadeleri (REGEX) desteklediğini de belirtmek gerekir. Bunlar, özel ve karmaşık bir sözdizimi kullanarak metindeki kalıpları tanımlamanıza izin verir..
İşte bunun nasıl işe yarayabileceğine bir örnek. Yukarıda belirtilen şarkı sözlerini alacağız, ancak her satırın çıktısını almak için regex kullanın. değil ile başla “almak”.
kedi tom.txt | sed / ^ Al / d
Sed, elbette, inanılmaz derecede faydalıdır. Ancak Awk ile birleştirildiğinde daha da güçlüdür..
Awk Nedir?
Awk, Sed gibi, büyük metin gövdeleriyle baş etmek için tasarlanmış bir programlama dilidir. Ancak Sed metni işlemek ve değiştirmek için kullanılırken, Awk çoğunlukla bir araç olarak kullanılır. analiz ve raporlama.
Sed gibi, Awk ilk olarak 1970'lerde Bell Laboratuarlarında geliştirildi. Adı, programdan gelmiyor yapar, fakat yazarların her birinin soyadı - Alfred Aho, Peter Weinberger ve Brian Kernaghan.
Awk, bir metin dosyasını veya giriş akışını her seferinde bir satır okuyarak çalışır. Her satır önceden tanımlanmış bir düzenle eşleşip eşleşmediğini görmek için taranır. Bir eşleşme bulunursa, bir eylem gerçekleştirilir.
Ancak Sed ve Awk benzer amaçları paylaşsalar da, ikisi tamamen farklı tasarım felsefeleriyle tamamen farklı iki dildir. Bazı genel amaçlı dillere daha çok benziyor Awk Bugün Öğrenmek İçin Bir Programlama Dilini Seçme ve 2 Yılda Harika Bir İş Alma Günümüzde Öğrenmek İçin Bir Programlama Dilini Seçme ve 2 Yılda İyi Bir İş Alma gerçekten iyi bir programcı olmak; Öyleyse, yarın işe almak için, bugünden başlayacak doğru dili seçmenin bir yolu var mı? , C, Python ve Bash gibi. Fonksiyonları ve yinelemeler ve değişkenler gibi şeylere daha C'ye benzer bir yaklaşımı vardır (James Bruce, yinelemenin nasıl çalıştığını açıkladı. Yeni Başlayanlar İçin Programlamanın Mutlak Temelleri (Bölüm 2) Yeni Başlayanlar İçin Programlamanın Mutlak Temelleri (Bölüm 2) Kısmen Mutlak yeni başlayanlardan 2 tanesi programlama için rehberlik ediyor: Fonksiyonların temellerini, dönüş değerlerini, döngüler ve koşulların temellerini ele alacağım, bununla uğraşmadan önce birinci bölümü okuduğunuzdan emin olun,…. Basitçe söylemek gerekirse, bir programlama dili gibi geliyor.
Öyleyse deneyelim. Take On Me şarkı sözlerini kullanarak, 20 karakterden daha uzun olan tüm satırları yazdıracağız..
awk 'uzunluk ($ 0)> 80' tom.txt
Bir sonraki örnek utanmadan resmi Awk belgelerine eklenmiştir. Ancak bu, güçlü ama küçük dilin potansiyelinin harika bir örneği. Aynı zamanda yineleme ve değişkenler gibi şeylerin içinde nasıl çalıştığını gösteren harika bir gösteri. İlk önce adlı bir dosya oluşturun. “WordCount.awk”, ve aşağıdaki satırları ekleyin.
((i = 1; i <= NF; i++) freq[$i]++
END için (fraks içindeki kelime) printf "% s \ t% d \ n", kelime, frek [kelime]
Kaydet ve aşağıdaki komutla çalıştır.
awk -f WordCount.awk tom.txt
Harika değil mi? Muhtemelen herhangi bir sırada olmadıklarını fark edeceksiniz. Sen kutu sonuçları Unix sort yardımcı programını kullanarak sıralayın. Ama bunu bir gün daha bırakacağız. Basit tutacağız.
İkisini Birleştirmek
Awk ve Sed hem birleştirildiğinde inanılmaz derecede güçlüler. Bunu Unix borularını kullanarak yapabilirsiniz. Bunlar “|” komutlar arasında bit.
Bunu deneyelim: Take On Me'de 20'den fazla karakter içeren tüm satırları Awk kullanarak listeleyeceğiz. O zaman başlayacağımız bütün çizgileri soyacağız. “almak”. Birlikte, hepsi bu gibi görünüyor:
awk 'uzunluk (0 ABD doları)> 20' tom.txt | sed / ^ Al / d
Ve bunu üretir:
Şimdi onu çevirelim. Take ile başlayan tüm satırları kaldırarak başlayacağız ve ardından her kelimenin kaç kez göründüğünü hesaplayacağımız Awk'a yönlendireceğiz. Biraz şuna benziyor:
kedi tom.txt | sed / ^ Al / d | awk - f WordCount.awk
Sed ve Awk'ün Gücü
Tek bir makalede açıklayabileceğiniz çok fazla şey var. Ama umarım ölçülemeyecek kadar güçlü olan Sed ve Awk’lerin ne kadar güçlü olduklarını göstermişimdir.. Basitçe söylemek gerekirse, onlar bir metin işleme santrali.
Neden bu kadar umursamak zorundasın? Peki, bir metin belgesinde öngörülebilir, tekrarlayan değişiklikler yapmanız gerektiğinde hiçbir zaman bilmediğiniz gerçeğin yanı sıra, Sed ve Awk, günlük dosyalarını ayrıştırmak için mükemmeldir. Bu, LAMP sunucunuzda bir sorun için hata ayıklamaya çalıştığınızda özellikle kullanışlıdır. Yalnızca SSH Web Hosting için mi Kaydolun? Endişelenmeyin - Kolayca Herhangi Bir Web Yazılımını Yükleyin Sadece SSH Web Hosting için Kayıtlı Mısınız? Endişelenmeyin - Kolayca Herhangi Bir Web Yazılımını Kurun Linux'u güçlü komut satırından çalıştırmakla ilgili ilk şeyi bilmiyor musunuz? Daha fazla endişelenme. , veya sunucunuzun saldırıya uğradığını kontrol etmek için erişim günlüklerinize bakın..
Sed ve Awk için ilginç bir kullanım buldunuz mu? Takdir edilmediğini düşündüğünüz başka Linux yardımcı programı var mı? Aşağıdaki yorumlarda bana haber verin, sohbet edelim.