İlan

En çok takdir edilmeyen Linux yardımcı programlarından ikisi Sed ve Awk. Kuşkusuz, büyük bir kod veya metin parçasında tekrarlayan değişiklikler yapmak zorunda kalırsanız veya bazı metinleri analiz etmek zorunda kalırsanız, Sed ve Awk paha biçilmezdir.

Peki, onlar ne? Nasıl kullanılırlar? Ve birlikte birleştirildiklerinde metni işlemeyi nasıl kolaylaştırırlar?

Sed Nedir?

sed 1971 yılında Bell Laboratuarları, efsanevi bilgi işlem öncüsü tarafından Lee E. McMahon.

Adı akış düzenleyicive bu onun yaptığı gibi. Metin gövdelerini veya akışlarını düzenlemenizi sağlar programlıKompakt ve basit, ancak Turing-complete programlama dili ile.

Çalışma şekli basittir: metni bir satır satır ara belleğe okur. Her satır için, varsa, önceden tanımlanmış talimatları uygular.

Örneğin, birisi "bira" kelimesini "soda" ile değiştiren ve ardından tüm metni içeren bir metin dosyasına aktarılan bir Sed komut dosyası yazacaksa şarkı sözleri "Duvarda 99 Şişe Bira", bu dosya satır satır bazda gider ve "Duvarda 99 Şişe Soda" yazdırın ve böylece üzerinde.

instagram viewer

En temel Sed komut dosyası bir Merhaba Dünyadır. Burada, “Merhaba Dünya” yı yazdırmak için yalnızca dize veren Unix Echo yardımcı programını kullanıyoruz. Ama bunu Sed'e bağlarız ve ona “Dünya” nın yerine “Dave” koymasını söyleriz. Kendini açıklayan şeyler.

echo "Merhaba Dünya" | sed s / dünya / Dave
sedawk-dave

Daha karmaşık bir düzenleme yapmanız gerekiyorsa Sed talimatlarını dosyalarda da birleştirebilirsiniz. İlham alan bu komik Reddit iplik, Şarkı sözlerini A-Ha’lara götüreceğim. Beni Alve "I", "Ben" ve "Benim" öğelerinin her birini Greg ile değiştirin.

İlk olarak, şarkı sözlerini şarkıya bir metin dosyasında koyacağım tom.txt. Sonra tercih ettiğim metin düzenleyiciyi açacağım ( favori Vim Vim Metin Düzenleyicisine Şans Vermek İçin En Önemli 7 NedenYıllarca bir metin düzenleyicisini birbiri ardına denedim. Siz söyleyin, denedim. Bu editörlerin her birini iki aydan uzun bir süre birincil günlük editörüm olarak kullandım. Her nasılsa, ben ... Daha fazla oku , fakat Nano nano vs. vim: Terminal Metin Düzenleyicileri KarşılaştırıldıLinux, neredeyse hiç kimsenin Terminal'i kullanmak zorunda kalmadan kullanması için yeterince kolay olmasına rağmen, düzenli olarak kullanan veya nasıl kontrol edebileceğini merak eden bazılarımız var ... Daha fazla oku ve gedit gedit: En Çok Dolu Düz Metin Editörlerinden [Linux ve Windows]Düz metin düzenleyicileri düşündüğünüzde, aklınıza gelebilecek ilk şey Windows 'Not Defteri uygulamasıdır. İş tanımının tam olarak ne yaptığını yapar - düz bir metin için düz özellikler ... Daha fazla oku her ikisi de mükemmel seçimlerdir) ve aşağıdaki satırları ekleyin. Oluşturduğunuz dosyanın sona erdiğinden emin olun .sed.

sed-Greg-sed

Yukarıdaki örnekte kendimi tekrarladığımı fark edebilirsiniz (örn. S / me / Greg / ve s / Me / Greg /). Çünkü Sed'in bazı sürümleri, Mac OS X ile birlikte gelenler gibi değil büyük / küçük harfe duyarlı olmayan eşleştirmeyi destekler. Sonuç olarak, her kelime için iki Sed talimatı yazmalıyız, bu yüzden büyük ve büyük harf olmayan versiyonu tanır.

Bu, "Ben", "Ben" ve "Benim" öğelerinin her birini elinizle değiştirmiş gibi mükemmel bir şekilde çalışmaz. Unutmayın, bunu Sed komutlarını bir komut dosyasında nasıl gruplayabileceğinizi göstermek için bir alıştırma olarak kullanıyoruz ve sonra bunları tek bir komutla yürütebiliyoruz.

Sonra dosyayı çağırmamız gerekiyor. Bunu yapmak için bu komutu çalıştırıyoruz.

kedi tom.txt | sed -f Instagram Hesabındaki Resim ve Videoları greg.sed

Yavaşlayalım ve bunun ne yaptığına bakalım. Kartal gözlü okuyucular, değil burada Echo kullanıyor. Cat kullanıyoruz. Çünkü Cat dosyanın tüm içeriğini yazdırırken, echo yalnızca dosya adını yazdırır. Sed'i “-f” bayrağıyla çalıştırdığımızı da fark etmiş olacaksınız. Bu, komut dosyasını bir dosya olarak açmasını söyler.

Sonuç şudur.

sed-greg-komut

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ızı sağlar.

İşte bunun nasıl çalışabileceğine bir örnek. Sözü edilen şarkı sözlerini alacağız, ancak her satırı yazdırmak için normal ifadeyi kullanacağız. değil “Take” ile başlayın.

kedi tom.txt | sed / ^ Al / d
sed-regex-take

Sed, elbette, inanılmaz derecede faydalı. Ancak Awk ile birleştirildiğinde daha da güçlü.

Awk Nedir?

awkSed gibi, büyük metin gövdeleriyle uğraşmak için tasarlanmış bir programlama dilidir. Ancak Sed, metni işlemek ve değiştirmek için kullanılırken, Awk çoğunlukla aşağıdakiler için bir araç olarak kullanılır: analiz ve raporlama.

Sed gibi, Awk ilk olarak 1970'lerde Bell Labs'da geliştirildi. Adı programdan gelmiyor yapardaha ziyade her yazarın soyadı - Alfred Aho, Peter Weinberger ve Brian Kernaghan.

Awk, bir metin dosyasını veya giriş akışını tek tek bir satır okuyarak çalışır. Her satır, önceden tanımlanmış bir kalıpla 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şabilirken, tamamen farklı iki dildir, tamamen farklı iki tasarım felsefesi vardır. Awk biraz daha benzer genel amaçlı diller Bugün Öğrenmek ve 2 Yılda Harika Bir İş Almak İçin Bir Programlama Dili Nasıl SeçilirGerçekten iyi bir programcı olmak yıllar süren özel çalışmalar gerektirebilir; yarın işe alınmak için bugünden başlamak için doğru dili seçmenin bir yolu var mı? Daha fazla oku , C, Python ve Bash gibi. Fonksiyonlar gibi şeyler ve yineleme ve değişkenler gibi şeylere daha C benzeri bir yaklaşım var (James Bruce yinelemenin nasıl çalıştığını açıkladı Yeni Başlayanlar İçin Programlamanın Mutlak Temelleri (Bölüm 2)Mutlak yeni başlayanlar için programlama kılavuzumuzun 2. bölümünde, fonksiyonların, dönüş değerlerinin, döngülerin ve koşulların temellerini ele alacağım. Bu konuyu ele almadan önce bölüm 1'i okuduğunuzdan emin olun. Daha fazla oku ). Basitçe söylemek gerekirse, daha çok bir programlama dili gibi geliyor.

Hadi deneyelim. Take Me Me şarkı sözlerini kullanarak, 20 karakterden uzun satırları yazdıracağız.

awk 'uzunluğu (0 $)> 80' tom.txt awk uzunlukta

Bir sonraki örnek utanmadan beşik resmi Awk belgeleri. Ancak bu güçlü ama küçük dilin potansiyeline harika bir örnek. Ayrıca, yineleme ve değişkenler gibi şeylerin içinde nasıl çalıştığını gösteren harika bir gösteri. İlk olarak, “WordCount.awk” adlı bir dosya oluşturun ve aşağıdaki satırları ekleyin.

{için (i = 1; i <= NF; i ++) freq [$ i] ++ }
END {için (sıklıkta kelime) printf "% s \ t% d \ n", sözcük, sıklık [sözcük] }

Kaydedin ve aşağıdaki komutla çalıştırın.

awk -f WordCount.awk tom.txt

awk-wordcount
Harika, değil mi? Muhtemelen herhangi bir düzende olmadıklarını fark edeceksiniz. Sen Yapabilmek sonuçları Unix sıralama 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 birleştirildiğinde inanılmaz derecede güçlüler. Bunu Unix borularını kullanarak yapabilirsiniz. Bunlar “|” komutlar arasındaki bit sayısı.

Şunu deneyelim: Take On Me'de 20'den fazla karakter içeren tüm satırları Awk kullanarak listeleyeceğiz. Ardından, ile başlayan tüm satırları keseceğiz “Al”. Birlikte, hepsi şöyle görünür:

awk 'uzunluğu (0 $)> 20' tom.txt | sed / ^ Al / d

Ve bunu üretir:

awk uzunlukta-sed

Şimdi bunu tersine çevirelim. Take ile başlayan tüm satırları kaldırarak başlayacağız ve daha sonra onları her kelimenin kaç kez göründüğünü sayacağımız Awk ile ilişkilendireceğiz. Biraz şuna benziyor:

kedi tom.txt | sed / ^ Al / d | awk -f WordCount.awk
awk-wordCount-sed

Sed ve Awk'ın Gücü

Tek bir makalede açıklayabileceğiniz çok şey var. Ama umarım ölçülemeyecek kadar güçlü Sed ve Awk'ın ne kadar güçlü olduğunu göstermişimdir. Basitçe söylemek gerekirse, bunlar bir metin işleme merkezi.

Neden bu kadar umursamak zorundasın? Peki, bir metin belgesinde ne zaman tahmin edilebilir, tekrarlayan değişiklikler yapmanız gerektiğini asla bilmemenizin yanı sıra, Sed ve Awk günlük dosyalarını ayrıştırmak için mükemmeldir. Bu, özellikle bir sorunu ayıklamaya çalışırken kullanışlıdır LAMP sunucunuzda Yalnızca SSH Web Hosting'e kaydoldunuz mu? Merak etmeyin - Kolayca herhangi bir Web Yazılımı yükleyinGüçlü komut satırı ile Linux'u çalıştırmakla ilgili ilk şey bilmiyor musunuz? Artık endişelenme. Daha fazla oku veya sunucunuzun saldırıya uğramış olup olmadığını görmek 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ı programları var mı? Aşağıdaki yorumlarda bana bildirin, sohbet edelim.

Matthew Hughes, Liverpool, İngiltere'den bir yazılım geliştiricisi ve yazarıdır. Elinde bir fincan güçlü siyah kahve olmadan nadiren bulunur ve kesinlikle Macbook Pro ve kamerasına hayran kalır. Blogunu şurada okuyabilirsiniz: http://www.matthewhughes.co.uk ve @matthewhughes'da Twitter'da takip edin.