Linux Sistem Yönetimi Görevleri için 15 Sed Komutu İpuçları


Her sistem yöneticisi günlük olarak düz metin dosyalarıyla uğraşmak zorundadır. Belirli bölümleri nasıl görüntüleyeceğinizi, kelimeleri nasıl değiştireceğinizi ve bu dosyalardaki içeriği nasıl filtreleyeceğinizi bilmek, Google'da arama yapmak zorunda kalmadan kullanışlı olmanız gereken becerilerdir.

Bu makalede, tanınmış akış düzenleyicisi sed'i inceleyeceğiz ve daha önce bahsettiğimiz hedeflere ulaşmak için onu kullanmaya yönelik 15 ipucunu ve daha fazlasını paylaşacağız.

Sed Komutanlığı Nedir?

Akış düzenleyicinin kısaltması olan 'sed' komutu, metin akışları üzerinde çalışan, kullanıcıların veriler üzerinde arama, değiştirme, ekleme ve gibi çeşitli işlemleri gerçekleştirmesine olanak tanıyan çok yönlü ve güçlü bir metin işleme aracıdır. silmek. 'Sed', metin işleme kalıplarını tanımlamak için normal ifadeler kullanır ve toplu düzenleme görevleri ve komut dosyalarındaki metin işleme için kullanılabilir.

Dikkate değer özelliklerinden biri, dosyaları doğrudan değiştirebildiği veya değişiklik yaparken yedek kopyalar oluşturabildiği yerinde düzenlemedir. 'Sed' sistem yöneticileri, programcılar ve komut satırında metin dönüştürme ve veri işleme görevleriyle ilgilenen herkes için önemli bir araçtır.

Aşağıda örneklerle birlikte bazı yaygın "sed" komutları verilmiştir:

1. Bir Dosyanın Çeşitli Satırlarını Görüntüleme

Head ve tail gibi araçlar bir dosyanın altını veya üstünü görüntülememizi sağlar. Ortadaki bir bölümü görmemiz gerekirse ne olur? Aşağıdaki tek satırlık sed, tecmint.txt'den 5 ile 10 arasındaki satırları döndürür:

sed -n '5,10p' tecmint.txt

2. Belirli Bir Aralık Dışında Tüm Dosyayı Görüntüleme

Öte yandan, belirli bir aralık dışında dosyanın tamamını yazdırmak istemeniz de mümkündür. 20 ile 35 arasındaki satırları tecmint.txt'den hariç tutmak için şunları yapın:

sed '20,35d' myfile.txt

3. Ardışık Olmayan Çizgileri ve Aralıkları Görüntüleme

Ardışık olmayan bir dizi çizgiyle veya birden fazla aralıkla ilgilenmeniz mümkündür. tecmint.txt'den 5-7 ve 10-13 satırlarını görüntüleyelim:

sed -n -e '5,7p' -e '10,13p' tecmint.txt

Gördüğünüz gibi -e seçeneği, her aralık için belirli bir eylemi (bu durumda satırları yazdırma) yürütmemize olanak tanır.

4. Dosyadaki Kelimeleri veya Dizeleri Değiştirmek

tecmint.txt'de sürüm kelimesinin her örneğini hikaye ile değiştirmek için şunları yapın:

sed 's/version/story/g' tecmint.txt

Ayrıca, karakter büyük/küçük harf durumunu göz ardı etmek için g yerine gi kullanmayı düşünebilirsiniz:

sed 's/version/story/gi' myfile.txt

Birden fazla boş alanı tek bir boşlukla değiştirmek için ip rota gösterisi komutunun çıktısını bir boru hattıyla kullanacağız:

ip route show | sed 's/  */ /g'

ip Route Show'un çıktısını ardışık düzen ile ve ardışık düzen olmadan karşılaştırın:

5. Bir Aralık İçindeki Kelimeleri veya Dizeleri Değiştirmek

Yalnızca satır aralığındaki (örneğin, 30 ila 40) sözcükleri değiştirmek istiyorsanız şunları yapabilirsiniz:

sed '30,40 s/version/story/g' tecmint.txt

Elbette aralık yerine tek bir satırı karşılık gelen numarasıyla belirtebilirsiniz.

6. Dosyadan Yorumları Kaldırma

Bazen yapılandırma dosyaları açıklamalarla yüklenir. Bu kesinlikle yararlı olsa da, bazen hepsini bir bakışta görmek istiyorsanız yalnızca yapılandırma yönergelerini görüntülemek yararlı olabilir.

Boş satırları veya # ile başlayan satırları Apache yapılandırma dosyasından kaldırmak için şunu yapın:

sed '/^#\|^$\| *#/d' httpd.conf

Şapka işaretinin ardından gelen sayı işareti (^#) satırın başlangıcını belirtirken, ^$ boş satırları temsil eder. Dikey çubuklar boole işlemlerini gösterirken ters eğik çizgi dikey çubuklardan kaçmak için kullanılır.

Bu özel durumda, Apache yapılandırma dosyasında bazı satırların başında olmayan #'lar içeren satırlar vardır, dolayısıyla bunları kaldırmak için de *# kullanılır.

7. Dosyadaki Büyük/Küçük Harfe Duyarsız Bir Kelimeyi Değiştirin

Büyük veya küçük harfle başlayan bir kelimeyi başka bir kelimeyle değiştirmek için sed'i de kullanabiliriz. Örnek olarak, tecmint.txt dosyasında zip veya Zip kelimesini rar ile değiştirelim:

sed 's/[Zz]ip/rar/g' tecmint.txt

8. Günlük Dosyasında Belirli Bir Olayı Bulma

sed'in başka bir kullanımı, belirli bir normal ifadeyle eşleşen bir dosyadaki satırların yazdırılmasıdır. Örneğin, /var uyarınca 2 Temmuz'da gerçekleştirilen yetkilendirme ve kimlik doğrulama etkinliklerini görüntülemek ilgimizi çekebilir. /log/secure bir CentOS sunucusuna giriş yapın.

Bu durumda, aranacak kalıp her satırın başında 2 Temmuz olur:

sed -n '/^Jul  1/ p' /var/log/secure

9. Dosyaya Boşluk veya Boş Satır Eklemek

sed ile dosyadaki boş olmayan her satır için de boşluk (boş satırlar) ekleyebiliriz. Düz metin dosyası olan LICENSE'te her satıra bir boş satır eklemek için şunları yapın:

sed G tecmint.txt

İki boş satır eklemek için şunu yapın:

sed 'G;G' tecmint.txt

Daha fazla boş satır eklemek istiyorsanız noktalı virgülle ayrılmış bir büyük harf G ekleyin. Aşağıdaki resimde bu ipucunda özetlenen örnek gösterilmektedir:

Büyük bir yapılandırma dosyasını incelemek istiyorsanız bu ipucu kullanışlı olabilir. Her iki satıra bir boşluk eklemek ve çıktıyı daha az sayıda paylaştırmak, daha kullanıcı dostu bir okuma deneyimiyle sonuçlanacaktır.

10. Bir Dosyadaki ^M'yi Kaldırmak

dos2unix programı, düz metin dosyalarını Windows/Mac biçimlendirmesinden Unix/Linux biçimine dönüştürür ve bu platformlarda kullanılan bazı metin düzenleyicileri tarafından eklenen gizli yeni satır karakterlerini kaldırır. Linux sisteminizde yüklü değilse, işlevselliğini yüklemek yerine sed ile taklit edebilirsiniz.

Soldaki resimde birkaç DOS yeni satır karakteri (^M) görüyoruz, bunlar daha sonra şu şekilde kaldırılmıştır:

sed -i 's/\r//' myfile.txt

Lütfen -i seçeneğinin yerinde düzenlemeyi gösterdiğini unutmayın. Daha sonra değişiklikler ekrana geri dönmeyecek, dosyaya kaydedilecektir.

Not: Vim düzenleyicisinde bir dosyayı düzenlerken Ctrl+V ve Ctrl+M tuşlarına basarak DOS yeni satır karakterlerini ekleyebilirsiniz.

11. Sed Komutu ile Yedekleme Dosyası Oluşturun

Önceki ipucunda, bir dosyayı değiştirmek için sed'i kullandık ancak orijinal dosyayı kaydetmedik. Bazen her ihtimale karşı orijinal dosyanın yedek bir kopyasını kaydetmek iyi bir fikirdir.

Bunu yapmak için, orijinal dosyayı yeniden adlandırmada kullanılacak -i seçeneğinin ardından (tek tırnak içinde) bir sonek belirtin.

Aşağıdaki örnekte, bu veya Bu ifadesinin tüm örneklerini (büyük/küçük harf göz ardı edilerek) dosyam.txt dosyasındakiyle değiştireceğiz ve kaydedeceğiz orijinal dosyayı myfile.txt.orig olarak kaydedin.

Son olarak, her iki dosya arasındaki farkları belirlemek için diff yardımcı programını kullanacağız:

sed -i'.orig' 's/this/that/gi' myfile.txt

12. Bir Dosyadaki Kelime Çiftlerini Değiştirmek

Ad, Soyadı biçiminde tam adlar içeren bir dosyanız olduğunu varsayalım. Dosyayı yeterli şekilde işlemek için Soyadı ve Ad'ı değiştirmek isteyebilirsiniz.

Bunu sed ile oldukça kolay bir şekilde yapabiliriz:

sed 's/^\(.*\),\(.*\)$/\, /g' names.txt

Yukarıdaki resimde, 1 ve 2 sayılarında olduğu gibi, özel karakterler olan parantezlerin de kaçışlanması gerektiğini görebiliriz.

Bu sayılar, vurgulanan normal ifadeleri temsil eder (bunların parantez içinde görünmesi gerekir):

  • 1 virgülüne kadar her satırın başlangıcını temsil eder.
  • 2, virgülün sağından satırın sonuna kadar olan her şey için yer tutucudur.

İstenilen çıktı şu biçimde gösterilir: İkinciSütun (Soyadı) + virgül + boşluk + BirinciSütun (Ad). İstediğiniz şekilde değiştirmekten çekinmeyin.

13. Kelimeleri Yalnızca Ayrı Bir Eşleşme Bulunursa Değiştirmek

Bazen belirli bir kelimenin tüm örneklerini veya rastgele birkaç örneğini değiştirmek tam olarak ihtiyacımız olan şey değildir. Belki ayrı bir eşleşme bulunursa değiştirme işlemi yapmamız gerekebilir.

Örneğin, yalnızca hizmetler kelimesi aynı satırda bulunuyorsa başlat kelimesini durdur ile değiştirmek isteyebiliriz. Bu senaryoda ne olacak:

We need to start partying at work,
but let’s remember to start all services first.

İlk satırda start, ikinci satırın aksine bu satırda hizmetler kelimesi görünmediğinden stop ile değiştirilmeyecektir.

sed '/services/ s/start/stop/g' msg.txt

14. Aynı Anda İki veya Daha Fazla Oyuncu Değişikliği Yapmak

Tek bir sed komutunda iki veya daha fazla değişikliği birleştirebilirsiniz. myfile.txt dosyasındaki o ve satır kelimelerini sırasıyla This ve ayet ile değiştirelim.

Sıradan bir sed değiştirme komutunun ardından noktalı virgül ve ikinci bir değiştirme komutunun kullanılmasıyla bunun nasıl yapılabileceğine dikkat edin:

sed -i 's/that/this/gi;s/line/verse/gi' myfile.txt

Bu ipucu aşağıdaki resimde gösterilmektedir:

15. Sed ve Diğer Komutları Birleştirmek

Elbette sed, daha güçlü komutlar oluşturmak için diğer Linux komutlarıyla birleştirilebilir. Örneğin, İPUCU #4'te verilen örneği kullanalım ve IP adresimizi ip Route komutunun çıktısından çıkaralım.

Yalnızca src kelimesinin bulunduğu satırı yazdırarak başlayacağız. Daha sonra birden fazla alanı tek bir alana dönüştüreceğiz. Son olarak, IP adresinin bulunduğu 9. alanı keseceğiz (alan ayırıcı olarak tek bir boşluk dikkate alınarak):

ip route show | sed -n '/src/p' | sed -e 's/  */ /g' | cut -d' ' -f9

Aşağıdaki resim yukarıdaki komutun her adımını göstermektedir:

Özet

Bu kılavuzda, günlük sistem yönetimi görevlerinizde size yardımcı olacak 15 sed ipucu ve püf noktasını paylaştık. Düzenli olarak kullandığınız ve bizimle ve topluluğun geri kalanıyla paylaşmak istediğiniz başka bir ipucu var mı?

Eğer öyleyse, aşağıdaki yorum formunu kullanarak bize bildirmekten çekinmeyin. Soru ve yorumlarınızı da bekliyoruz; sizden haber almayı sabırsızlıkla bekliyoruz!