Gelişmiş sed: Linux'ta metin akışlarını yönetme. Linux akış metin düzenleyicisini kullanarak sed Sed bir dosyaya bir satır ekleyin

Geçen sefer bash betiklerindeki fonksiyonlardan, özellikle de onları komut satırından nasıl çağıracağımızdan bahsetmiştik. Bugünkü konumuz, dize verilerini işlemek için çok kullanışlı bir araç - sed adlı bir Linux yardımcı programı. Genellikle günlük dosyaları, yapılandırma dosyaları ve diğer dosyalar biçimindeki metinlerle çalışmak için kullanılır.



Bash betiklerinde verileri bir şekilde manipüle ederseniz, sed ve gawk araçlarına aşina olmalısınız. Burada sed ve metin manipülasyonuna odaklanacağız, çünkü bu, bash betiği geliştirmenin geniş alanlarındaki yolculuğumuzda çok önemli bir adımdır.

Şimdi sed ile çalışmanın temellerini ele alacağız ve bu aracı kullanmanın üç düzineden fazla örneğine bakacağız.

Temel bilgiler

Sed, akış metin düzenleyicisi olarak adlandırılır. Nano gibi etkileşimli metin düzenleyicilerde, metinler klavye kullanılarak, dosyaları düzenleyerek, metinleri ekleyerek, silerek veya değiştirerek işlenir. Sed, geliştirici tarafından tanımlanan kural kümelerine dayalı olarak veri akışlarını düzenlemenize olanak tanır. Bu komuta yapılan çağrı şöyle görünür:

$ sed seçenekler dosyası
Varsayılan olarak sed, STDIN'e çağrıldığında belirtilen komut kümesi kurallarını uygular. Bu, verilerin doğrudan sed'e geçirilmesine izin verir.

Örneğin, bunun gibi:

$ echo "Bu bir denemedir" | sed "s / test / başka bir test /"
İşte bu komutu çalıştırdığınızda elde ettiğiniz şey.


Basit bir sed çağrı örneği

Bu durumda sed, işlenmek üzere geçirilen satırdaki "test" kelimesini "başka bir test" kelimesiyle değiştirir. Tırnak içine alınmış metni işleme kuralını biçimlendirmek için eğik çizgiler kullanılır. Bizim durumumuzda s / pattern1 / pattern2 / gibi bir komut kullandık. "S" harfi "ikame" kelimesinin kısaltmasıdır, yani bir değiştirme komutuyla karşı karşıyayız. Bu komutu yürüten Sed, aktarılan metni tarayacak ve içinde bulunan parçaları (hangilerinden aşağıda bahsedeceğiz), kalıp1'e karşılık gelen kalıp2 ile değiştirecektir.

Yukarıda, sizi hızlandırmak için ilkel bir sed örneği verilmiştir. Aslında sed, dosyalarla çalışma gibi çok daha karmaşık metin işleme senaryolarında kullanılabilir.

Aşağıda, bir metin parçası ve bu komutla işlenmesinin sonuçları içeren bir dosya bulunmaktadır:

$ sed "s / test / başka bir test" ./myfile


Metin dosyası ve işlenmesinin sonuçları

Bu, yukarıda kullandığımız yaklaşımın aynısıdır, ancak sed şimdi dosyada depolanan metni işler. Ancak, dosya yeterince büyükse, sed'in verileri parçalar halinde işlediğini ve işlenenleri ekrana çıkardığını, dosyanın tamamının işlenmesini beklemeden fark edeceksiniz.

Sed, işlenen dosyadaki verileri değiştirmez. Düzenleyici dosyayı okur, okumayı işler ve çıktıyı STDOUT'a gönderir. Orijinal dosyanın değişmediğinden emin olmak için sed'e geçtikten sonra açmanız yeterlidir. Gerekirse, sed çıktısı, muhtemelen eski dosyanın üzerine yazılarak bir dosyaya yeniden yönlendirilebilir. Giriş ve çıkış akışlarının yeniden yönlendirilmesiyle ilgili bu serideki önceki serilerden birine aşina iseniz, bunu yapabilmeniz gerekir.

sed çağrılırken komut kümelerini yürütme

Veriler üzerinde birden çok işlem gerçekleştirmek için sed'i çağırırken -e anahtarını kullanın. Örneğin, iki metin parçasının değiştirilmesini şu şekilde ayarlayabilirsiniz:

$ sed -e "s / Bu / Şu /; s / test / başka bir test /" ./dosyam


sed'i çağırırken -e anahtarını kullanma

Her iki komut da dosyadaki her metin satırına uygulanır. Komutun sonu ile noktalı virgül arasında boşluk bırakmadan bunları noktalı virgülle ayırın.
sed'i çağırırken birkaç metin işleme kalıbı girmek için, ilk tek alıntıyı girdikten sonra Enter'a basabilir ve ardından kapanış alıntısını unutmadan her kuralı yeni bir satıra girebilirsiniz:

$ sed -e "> s / Bu / Bu /> s / test / başka bir test /" ./myfile
Bu formda sunulan komut yürütüldükten sonra olan budur.


sed ile çalışmanın başka bir yolu

Dosyadan komut okuma

Metni işlemek için çok sayıda sed komutunuz varsa, bunları önce bir dosyaya yazmak genellikle en iyisidir. sed komutlarını içeren dosyayı belirtmek için -f anahtarını kullanın:

İşte mycommands dosyasının içeriği:

S / Bu / Bu / s / test / başka bir test /
Komut dosyasını ve işlenecek dosyayı editöre ileterek sed'i çağıralım:

$ sed -f komutlarım dosyam
Böyle bir komutu çağırırken elde edilen sonuç, önceki örneklerde elde edilene benzer.


sed çağrılırken komutlarla bir dosya kullanma

Yedek komut bayrakları

Aşağıdaki örneğe yakından bakın.

$ sed "s / test / başka bir test /" dosyam
Bu, dosyada olan ve işlendikten sonra sed'in alacağı şeydir.


Orijinal dosya ve işlenmesinin sonuçları

Değiştir komutu normalde birkaç satırdan oluşan bir dosyayı işler, ancak arama metninin yalnızca her satırdaki ilk örnekleri değiştirilir. Bir kalıbın tüm oluşumlarını değiştirmek için ilgili bayrağı kullanmanız gerekir.

Bayrakları kullanırken değiştirme komutunu yazma şeması şöyle görünür:

S / desen / değiştirme / bayraklar
Bu komutun yürütülmesi birkaç şekilde değiştirilebilir.

  • Numarayı iletirken, dizideki kalıbın oluşumunun sıra numarası dikkate alınır; bu özel oluşum değiştirilecektir.
  • g bayrağı, dizgedeki kalıbın tüm oluşumlarını işlemeyi belirtir.
  • p bayrağı, orijinal dizenin içeriğini yazdırmayı belirtir.
  • w dosyası biçimindeki bir bayrak, komuta metin işlemenin sonuçlarını bir dosyaya yazmasını söyler.
İstenen parçanın değiştirilen oluşumunun konumunu belirten replace komutunun ilk varyantının kullanımını düşünün:

$ sed "s / test / başka bir test / 2" dosyam

Değiştirilecek parçanın konumunu belirten değiştir komutunun çağrılması

Burada yedek bayrak olarak 2 sayısını belirttik. Bu, her satırda gerekli desenin yalnızca ikinci oluşumunun değiştirildiği gerçeğine yol açtı. Şimdi global değiştirme bayrağını deneyelim - g:

$ sed "s / test / başka bir test / g" dosyam
Çıktıdan da görebileceğiniz gibi, bu komut, desenin metindeki tüm oluşumlarını değiştirdi.


Küresel değiştirme

Değiştirme komutu flag p, eşleşen satırları yazdırmanıza izin verir, ancak sed çağrılırken belirtilen -n seçeneği normal çıktıyı bastırır:

$ sed -n "s / test / başka bir test / p" dosyam
Sonuç olarak, bu yapılandırmada sed çalıştırıldığında, yalnızca belirtilen metin parçasının bulunduğu satırlar (bizim durumumuzda bir satır) görüntülenir.


p yerine komut bayrağını kullanma

Metin işleme sonuçlarını bir dosyaya kaydetmemizi sağlayan w bayrağını kullanalım:

$ sed "s / test / başka bir test / w çıktısı" dosyam


Metin işleme sonuçlarını bir dosyaya kaydetme

Komutun çalışması sırasında, verinin çıktısı alınırken, işlenen satırların w'den sonra adı belirtilen dosyaya yazıldığı açıkça görülmektedir.

ayırıcılar

/ bin / bash'ı / bin / csh in / etc / passwd ile değiştirdiğinizi hayal edin. Görev o kadar zor değil:

$ sed "s / \ / bin \ / bash / \ / bin \ / csh /" / etc / passwd
Ancak, tüm bunlar çok iyi görünmüyor. Gerçek şu ki, ayırıcı karakterler olarak eğik çizgiler kullanıldığından, sed'e iletilen satırlardaki aynı karakterlerin kaçması gerekir. Sonuç olarak, komutun okunabilirliği zarar görür.

Neyse ki, sed, değiştirme komutunda kullanmak için sınırlayıcı karakterleri kendimiz tanımlamamıza izin verir. Sınırlayıcı, s'den sonra karşılaşılan ilk karakterdir:

$ sed "s! / bin / bash! / bin / csh!" / vb / şifre
Bu durumda, ayırıcı olarak bir ünlem işareti kullanılır, bunun sonucunda kodun okunması daha kolaydır ve eskisinden çok daha temiz görünür.

İşlenecek metin parçalarının seçilmesi

Şimdiye kadar, düzenleyiciye iletilen tüm veri akışını işlemek için sed'i çağırdık. Bazı durumlarda, sed'in metnin yalnızca bir bölümünü - belirli bir satırı veya satır grubunu - işlemesi gerekir. Bu hedefe ulaşmak için iki yaklaşım kullanabilirsiniz:
  • İşlenen satırların sayısı için bir sınır belirleyin.
  • Hangi satırların işleneceğini filtreyi belirtin.
İlk yaklaşımı ele alalım. Burada iki seçeneğe izin verilir. Aşağıda ele alınan ilki, işlenecek bir satırın sayısını belirlemeyi sağlar:

$ sed "2s / test / başka bir test /" dosyam


Yalnızca bir satırı işle, sed çağrılırken verilen numara

İkinci seçenek bir dizi dizidir:

$ sed "2,3s / test / başka bir test /" dosyam


Bir dizi diziyi işlemek

Ayrıca dosyanın belirli bir satırdan sonuna kadar işlenmesi için replace komutunu çağırabilirsiniz:

$ sed "2, $ s / test / başka bir test /" dosyam


Bir dosyayı ikinci satırdan sonuna kadar işlemek

Değiştir komutunu kullanarak yalnızca belirtilen filtreyle eşleşen satırları işlemek için komutun şu şekilde çağrılması gerekir:

$ sed "/ likegeeks / s / bash / csh /" / etc / passwd
Yukarıda tartışılana benzer şekilde, model s komut adından önce geçirilir.


Bir filtreyle eşleşen satırlar işleniyor

Burada çok basit bir filtre kullandık. Bu yaklaşımın olanaklarını tam olarak ortaya çıkarmak için düzenli ifadeler kullanabilirsiniz. Bu serideki sonraki materyallerden birinde onlar hakkında konuşacağız.

Satırları Silme

Sed, dizelerdeki bir karakter dizisini bir başkasıyla değiştirmekten daha fazlası için iyidir. Onun yardımıyla, yani d komutunu kullanarak, metin akışından satırları kaldırabilirsiniz.

Komut çağrısı şöyle görünür:

$ sed "3d" dosyam
Üçüncü satırın metinden çıkarılmasını istiyoruz. Bunun bir dosya olmadığını unutmayın. Dosya değişmeden kalacaktır, silme işlemi yalnızca sed'in üreteceği çıktıyı etkileyecektir.


Üçüncü satırı kaldırma

d komutu çağrılırken silinecek satır numarasını belirtmezseniz akımdaki tüm satırlar silinecektir.

d komutunu bir dizi dizgeye nasıl uygulayacağınız aşağıda açıklanmıştır:

$ sed "2,3d" dosyam


Bir Satır Aralığını Silme

Ve verilen ile başlayan ve dosyanın sonuna kadar olan satırları nasıl sileceğiniz aşağıda açıklanmıştır:

$ sed "3, $ d" dosyam


Dosyanın sonuna kadar olan satırları sil

Çizgiler ayrıca desene göre de silinebilir:

$ sed "/ test / d" dosyam


Desene göre çizgileri silme

d'yi çağırırken, birkaç desen belirtebilirsiniz - kalıbın bulunduğu satırlar ve aralarındaki satırlar silinecektir:

$ sed "/ saniye /, / dördüncü / d" dosyam


Şablonları Kullanarak Bir Satır Aralığını Silme

Bir akışa metin ekleme

sed ile, i ve a komutlarını kullanarak bir metin akışına veri ekleyebilirsiniz:
  • i komutu verilen satırdan önce yeni bir satır ekler.
  • a komutu, verilen satırdan sonra yeni bir satır ekler.
i komutunun kullanımına ilişkin bir örneğe bakalım:

$ echo "Başka bir test" | sed "i \ İlk test"


takım ben

Şimdi a komutuna bir göz atalım:

$ echo "Başka bir test" | sed "a \ İlk test"


a komutu

Gördüğünüz gibi, bu komutlar, akıştaki verilerden önce veya sonra metin ekler. Ortada bir yere bir çizgi eklemeniz gerekirse ne olur?

Burada akış veya şablondaki referans çizgisinin numarasını belirterek yardımcı olacağız. Dizeleri bir aralık olarak adreslemenin burada çalışmayacağını unutmayın. Yeni bir satır eklememiz gereken satır numarasını belirterek i komutunu çağıralım:

$ sed "2i \ Bu, eklenen satırdır." dosyam


Referans satır numarasıyla komut veririm

Aynı şeyi a komutuyla da yapalım:

$ sed "2a \ Bu, eklenen satırdır." dosyam


Referans satırı numarasını belirten bir komut

i ve a komutları arasındaki farka dikkat edin. İlki belirtilenden önce yeni bir satır ekler, ikincisi sonra.

dizeleri değiştirme

c komutu, bir veri akışındaki tüm metin satırının içeriğini değiştirmenize olanak tanır. Ararken, akışa yeni veriler eklemeniz gereken satır numarasını belirtmeniz gerekir:

$ sed "3c \ Bu değiştirilmiş bir satırdır." dosyam


Tüm bir dizeyi değiştirme

Bir komut çağırırken düz metin veya normal ifade kalıbı kullanırsanız, kalıpla eşleşen tüm satırlar değiştirilir:

$ sed "/ Bu / c Bu, değiştirilmiş bir metin satırıdır." dosyam


Dizeleri desenle değiştirme

Karakterlerin değiştirilmesi

y komutu, çağrıldığında kendisine iletilen verilere göre değiştirilerek tek tek karakterler üzerinde çalışır:

$ sed "y / 123/567 /" dosyam


Karakterlerin değiştirilmesi

Bu komutu kullanırken, tüm metin akışı için geçerli olduğunu hesaba katmanız gerekir, onu belirli karakter oluşumlarıyla sınırlayamazsınız.

Satır numaralarını görüntüleme

= komutunu kullanarak sed'i çağırırsanız, yardımcı program veri akışındaki satır numaralarını yazdırır:

$ sed "=" dosyam


Satır numaralarını görüntüleme

Akış düzenleyici, içeriklerinin önüne satır numaralarını yazdırdı.

Bu komuta bir kalıp iletirseniz ve sed -n anahtarını kullanırsanız, yalnızca kalıpla eşleşen satır numaraları yazdırılır:

$ sed -n "/ test / =" dosyam


Desenle eşleşen satır numaralarını yazdır

Bir dosyadan eklenecek verileri okuma

Yukarıda, sed çağrısında neyin ekleneceğini belirterek, bir akışa veri ekleme tekniklerine baktık. Bir dosyayı veri kaynağı olarak da kullanabilirsiniz. Bunu yapmak için, belirtilen dosyadan akışa veri eklemenizi sağlayan r komutunu kullanın. Ararken, dosyanın içeriğini veya bir şablonu eklemeniz gereken satır numarasını belirleyebilirsiniz.

Bir örnek düşünelim:

$ sed "3r yeni dosya" dosyam


Bir akışa dosya içeriği ekleme

Burada yeni dosyanın içeriği, dosyamın üçüncü satırından sonra eklenmiştir.

r'yi çağırdığınızda kalıbı uygularsanız şunlar olur:

$ sed "/ test / r yenidosya" dosyam


r komutunu çağırırken bir şablon kullanma

Dosyanın içeriği, desenle eşleşen her satırdan sonra eklenecektir.

Örnek

Aşağıdaki görevi hayal edelim. Başka bir dosyadan alınan verilerle değiştirilmesi gereken, kendi içinde anlamsız olan belirli bir karakter dizisinin bulunduğu bir dosya var. Yani, DATA karakter dizisinin yer tutucu görevi gördüğü yeni dosya dosyası olsun. DATA için değiştirilecek veriler verilerde saklanır.

sed akış düzenleyicisinin r ve d komutlarını kullanarak bu sorunu çözebilirsiniz:

$ Sed "/ DATA> / (r yenidosya d)" dosyam


Yer göstergesini gerçek verilerle değiştirme

Gördüğünüz gibi, sed çıktıya DATA yer tutucusu yerine veri dosyasından iki satır ekledi.

sonuçlar

Bugün sed akış düzenleyicisiyle çalışmanın temellerini ele aldık. Aslında, sed çok büyük bir konudur. Bunu öğrenmek, yeni bir programlama dili öğrenmekle karşılaştırılabilir, ancak temel bilgileri anladıktan sonra, ihtiyacınız olan herhangi bir düzeyde sed'de ustalaşabilirsiniz. Sonuç olarak, metinleri onunla işleme olanaklarınız yalnızca hayal gücünüzle sınırlı olacaktır.

Hepsi bugün için. Bir dahaki sefere awk veri işleme dilinden bahsedelim.

Sevgili okuyucular! Günlük işlerinizde sed kullanıyor musunuz? Eğer öyleyse, lütfen deneyiminizi paylaşın.

Geçen sefer bash betiklerindeki fonksiyonlardan, özellikle de onları komut satırından nasıl çağıracağımızdan bahsetmiştik. Bugünkü konumuz, dize verilerini işlemek için çok kullanışlı bir araç - sed adlı bir Linux yardımcı programı. Genellikle günlük dosyaları, yapılandırma dosyaları ve diğer dosyalar biçimindeki metinlerle çalışmak için kullanılır.



Bash betiklerinde verileri bir şekilde manipüle ederseniz, sed ve gawk araçlarına aşina olmalısınız. Burada sed ve metin manipülasyonuna odaklanacağız, çünkü bu, bash betiği geliştirmenin geniş alanlarındaki yolculuğumuzda çok önemli bir adımdır.

Şimdi sed ile çalışmanın temellerini ele alacağız ve bu aracı kullanmanın üç düzineden fazla örneğine bakacağız.

Temel bilgiler

Sed, akış metin düzenleyicisi olarak adlandırılır. Nano gibi etkileşimli metin düzenleyicilerde, metinler klavye kullanılarak, dosyaları düzenleyerek, metinleri ekleyerek, silerek veya değiştirerek işlenir. Sed, geliştirici tarafından tanımlanan kural kümelerine dayalı olarak veri akışlarını düzenlemenize olanak tanır. Bu komuta yapılan çağrı şöyle görünür:

$ sed seçenekler dosyası
Varsayılan olarak sed, STDIN'e çağrıldığında belirtilen komut kümesi kurallarını uygular. Bu, verilerin doğrudan sed'e geçirilmesine izin verir.

Örneğin, bunun gibi:

$ echo "Bu bir denemedir" | sed "s / test / başka bir test /"
İşte bu komutu çalıştırdığınızda elde ettiğiniz şey.


Basit bir sed çağrı örneği

Bu durumda sed, işlenmek üzere geçirilen satırdaki "test" kelimesini "başka bir test" kelimesiyle değiştirir. Tırnak içine alınmış metni işleme kuralını biçimlendirmek için eğik çizgiler kullanılır. Bizim durumumuzda s / pattern1 / pattern2 / gibi bir komut kullandık. "S" harfi "ikame" kelimesinin kısaltmasıdır, yani bir değiştirme komutuyla karşı karşıyayız. Bu komutu yürüten Sed, aktarılan metni tarayacak ve içinde bulunan parçaları (hangilerinden aşağıda bahsedeceğiz), kalıp1'e karşılık gelen kalıp2 ile değiştirecektir.

Yukarıda, sizi hızlandırmak için ilkel bir sed örneği verilmiştir. Aslında sed, dosyalarla çalışma gibi çok daha karmaşık metin işleme senaryolarında kullanılabilir.

Aşağıda, bir metin parçası ve bu komutla işlenmesinin sonuçları içeren bir dosya bulunmaktadır:

$ sed "s / test / başka bir test" ./myfile


Metin dosyası ve işlenmesinin sonuçları

Bu, yukarıda kullandığımız yaklaşımın aynısıdır, ancak sed şimdi dosyada depolanan metni işler. Ancak, dosya yeterince büyükse, sed'in verileri parçalar halinde işlediğini ve işlenenleri ekrana çıkardığını, dosyanın tamamının işlenmesini beklemeden fark edeceksiniz.

Sed, işlenen dosyadaki verileri değiştirmez. Düzenleyici dosyayı okur, okumayı işler ve çıktıyı STDOUT'a gönderir. Orijinal dosyanın değişmediğinden emin olmak için sed'e geçtikten sonra açmanız yeterlidir. Gerekirse, sed çıktısı, muhtemelen eski dosyanın üzerine yazılarak bir dosyaya yeniden yönlendirilebilir. Bu dizideki giriş ve çıkış akışlarının yeniden yönlendirilmesiyle ilgili önceki makalelerden birine aşina iseniz, bunu yapabilmeniz gerekir.

sed çağrılırken komut kümelerini yürütme

Veriler üzerinde birden çok işlem gerçekleştirmek için sed'i çağırırken -e anahtarını kullanın. Örneğin, iki metin parçasının değiştirilmesini şu şekilde ayarlayabilirsiniz:

$ sed -e "s / Bu / Şu /; s / test / başka bir test /" ./dosyam


sed'i çağırırken -e anahtarını kullanma

Her iki komut da dosyadaki her metin satırına uygulanır. Komutun sonu ile noktalı virgül arasında boşluk bırakmadan bunları noktalı virgülle ayırın.
sed'i çağırırken birkaç metin işleme kalıbı girmek için, ilk tek alıntıyı girdikten sonra Enter'a basabilir ve ardından kapanış alıntısını unutmadan her kuralı yeni bir satıra girebilirsiniz:

$ sed -e "> s / Bu / Bu /> s / test / başka bir test /" ./myfile
Bu formda sunulan komut yürütüldükten sonra olan budur.


sed ile çalışmanın başka bir yolu

Dosyadan komut okuma

Metni işlemek için çok sayıda sed komutunuz varsa, bunları önce bir dosyaya yazmak genellikle en iyisidir. sed komutlarını içeren dosyayı belirtmek için -f anahtarını kullanın:

İşte mycommands dosyasının içeriği:

S / Bu / Bu / s / test / başka bir test /
Komut dosyasını ve işlenecek dosyayı editöre ileterek sed'i çağıralım:

$ sed -f komutlarım dosyam
Böyle bir komutu çağırırken elde edilen sonuç, önceki örneklerde elde edilene benzer.


sed çağrılırken komutlarla bir dosya kullanma

Yedek komut bayrakları

Aşağıdaki örneğe yakından bakın.

$ sed "s / test / başka bir test /" dosyam
Bu, dosyada olan ve işlendikten sonra sed'in alacağı şeydir.


Orijinal dosya ve işlenmesinin sonuçları

Değiştir komutu normalde birkaç satırdan oluşan bir dosyayı işler, ancak arama metninin yalnızca her satırdaki ilk örnekleri değiştirilir. Bir kalıbın tüm oluşumlarını değiştirmek için ilgili bayrağı kullanmanız gerekir.

Bayrakları kullanırken değiştirme komutunu yazma şeması şöyle görünür:

S / desen / değiştirme / bayraklar
Bu komutun yürütülmesi birkaç şekilde değiştirilebilir.

  • Numarayı iletirken, dizideki kalıbın oluşumunun sıra numarası dikkate alınır; bu özel oluşum değiştirilecektir.
  • g bayrağı, dizgedeki kalıbın tüm oluşumlarını işlemeyi belirtir.
  • p bayrağı, orijinal dizenin içeriğini yazdırmayı belirtir.
  • w dosyası biçimindeki bir bayrak, komuta metin işlemenin sonuçlarını bir dosyaya yazmasını söyler.
İstenen parçanın değiştirilen oluşumunun konumunu belirten replace komutunun ilk varyantının kullanımını düşünün:

$ sed "s / test / başka bir test / 2" dosyam

Değiştirilecek parçanın konumunu belirten değiştir komutunun çağrılması

Burada yedek bayrak olarak 2 sayısını belirttik. Bu, her satırda gerekli desenin yalnızca ikinci oluşumunun değiştirildiği gerçeğine yol açtı. Şimdi global değiştirme bayrağını deneyelim - g:

$ sed "s / test / başka bir test / g" dosyam
Çıktıdan da görebileceğiniz gibi, bu komut, desenin metindeki tüm oluşumlarını değiştirdi.


Küresel değiştirme

Değiştirme komutu flag p, eşleşen satırları yazdırmanıza izin verir, ancak sed çağrılırken belirtilen -n seçeneği normal çıktıyı bastırır:

$ sed -n "s / test / başka bir test / p" dosyam
Sonuç olarak, bu yapılandırmada sed çalıştırıldığında, yalnızca belirtilen metin parçasının bulunduğu satırlar (bizim durumumuzda bir satır) görüntülenir.


p yerine komut bayrağını kullanma

Metin işleme sonuçlarını bir dosyaya kaydetmemizi sağlayan w bayrağını kullanalım:

$ sed "s / test / başka bir test / w çıktısı" dosyam


Metin işleme sonuçlarını bir dosyaya kaydetme

Komutun çalışması sırasında verilerin STDOUT'a çıktısı alınırken, işlenen satırların w'den sonra adı belirtilen dosyaya yazıldığı açıkça görülmektedir.

ayırıcılar

/ bin / bash'ı / bin / csh in / etc / passwd ile değiştirdiğinizi hayal edin. Görev o kadar zor değil:

$ sed "s / \ / bin \ / bash / \ / bin \ / csh /" / etc / passwd
Ancak, tüm bunlar çok iyi görünmüyor. Gerçek şu ki, ayırıcı karakterler olarak eğik çizgiler kullanıldığından, sed'e iletilen satırlardaki aynı karakterlerin kaçması gerekir. Sonuç olarak, komutun okunabilirliği zarar görür.

Neyse ki, sed, değiştirme komutunda kullanmak için sınırlayıcı karakterleri kendimiz tanımlamamıza izin verir. Sınırlayıcı, s'den sonra karşılaşılan ilk karakterdir:

$ sed "s! / bin / bash! / bin / csh!" / vb / şifre
Bu durumda, ayırıcı olarak bir ünlem işareti kullanılır, bunun sonucunda kodun okunması daha kolaydır ve eskisinden çok daha temiz görünür.

İşlenecek metin parçalarının seçilmesi

Şimdiye kadar, düzenleyiciye iletilen tüm veri akışını işlemek için sed'i çağırdık. Bazı durumlarda, sed'in metnin yalnızca bir bölümünü - belirli bir satırı veya satır grubunu - işlemesi gerekir. Bu hedefe ulaşmak için iki yaklaşım kullanabilirsiniz:
  • İşlenen satırların sayısı için bir sınır belirleyin.
  • Hangi satırların işleneceğini filtreyi belirtin.
İlk yaklaşımı ele alalım. Burada iki seçeneğe izin verilir. Aşağıda ele alınan ilki, işlenecek bir satırın sayısını belirlemeyi sağlar:

$ sed "2s / test / başka bir test /" dosyam


Yalnızca bir satırı işle, sed çağrılırken verilen numara

İkinci seçenek bir dizi dizidir:

$ sed "2,3s / test / başka bir test /" dosyam


Bir dizi diziyi işlemek

Ayrıca dosyanın belirli bir satırdan sonuna kadar işlenmesi için replace komutunu çağırabilirsiniz:

$ sed "2, $ s / test / başka bir test /" dosyam


Bir dosyayı ikinci satırdan sonuna kadar işlemek

Değiştir komutunu kullanarak yalnızca belirtilen filtreyle eşleşen satırları işlemek için komutun şu şekilde çağrılması gerekir:

$ sed "/ likegeeks / s / bash / csh /" / etc / passwd
Yukarıda tartışılana benzer şekilde, model s komut adından önce geçirilir.


Bir filtreyle eşleşen satırlar işleniyor

Burada çok basit bir filtre kullandık. Bu yaklaşımın olanaklarını tam olarak ortaya çıkarmak için düzenli ifadeler kullanabilirsiniz. Bu serideki sonraki materyallerden birinde onlar hakkında konuşacağız.

Satırları Silme

Sed, dizelerdeki bir karakter dizisini bir başkasıyla değiştirmekten daha fazlası için iyidir. Onun yardımıyla, yani d komutunu kullanarak, metin akışından satırları kaldırabilirsiniz.

Komut çağrısı şöyle görünür:

$ sed "3d" dosyam
Üçüncü satırın metinden çıkarılmasını istiyoruz. Bunun bir dosya olmadığını unutmayın. Dosya değişmeden kalacaktır, silme işlemi yalnızca sed'in üreteceği çıktıyı etkileyecektir.


Üçüncü satırı kaldırma

d komutu çağrılırken silinecek satır numarasını belirtmezseniz akımdaki tüm satırlar silinecektir.

d komutunu bir dizi dizgeye nasıl uygulayacağınız aşağıda açıklanmıştır:

$ sed "2,3d" dosyam


Bir Satır Aralığını Silme

Ve verilen ile başlayan ve dosyanın sonuna kadar olan satırları nasıl sileceğiniz aşağıda açıklanmıştır:

$ sed "3, $ d" dosyam


Dosyanın sonuna kadar olan satırları sil

Çizgiler ayrıca desene göre de silinebilir:

$ sed "/ test / d" dosyam


Desene göre çizgileri silme

d'yi çağırırken, birkaç desen belirtebilirsiniz - kalıbın bulunduğu satırlar ve aralarındaki satırlar silinecektir:

$ sed "/ saniye /, / dördüncü / d" dosyam


Şablonları Kullanarak Bir Satır Aralığını Silme

Bir akışa metin ekleme

sed ile, i ve a komutlarını kullanarak bir metin akışına veri ekleyebilirsiniz:
  • i komutu verilen satırdan önce yeni bir satır ekler.
  • a komutu, verilen satırdan sonra yeni bir satır ekler.
i komutunun kullanımına ilişkin bir örneğe bakalım:

$ echo "Başka bir test" | sed "i \ İlk test"


takım ben

Şimdi a komutuna bir göz atalım:

$ echo "Başka bir test" | sed "a \ İlk test"


a komutu

Gördüğünüz gibi, bu komutlar, akıştaki verilerden önce veya sonra metin ekler. Ortada bir yere bir çizgi eklemeniz gerekirse ne olur?

Burada akış veya şablondaki referans çizgisinin numarasını belirterek yardımcı olacağız. Dizeleri bir aralık olarak adreslemenin burada çalışmayacağını unutmayın. Yeni bir satır eklememiz gereken satır numarasını belirterek i komutunu çağıralım:

$ sed "2i \ Bu, eklenen satırdır." dosyam


Referans satır numarasıyla komut veririm

Aynı şeyi a komutuyla da yapalım:

$ sed "2a \ Bu, eklenen satırdır." dosyam


Referans satırı numarasını belirten bir komut

i ve a komutları arasındaki farka dikkat edin. İlki belirtilenden önce yeni bir satır ekler, ikincisi sonra.

dizeleri değiştirme

c komutu, bir veri akışındaki tüm metin satırının içeriğini değiştirmenize olanak tanır. Ararken, akışa yeni veriler eklemeniz gereken satır numarasını belirtmeniz gerekir:

$ sed "3c \ Bu değiştirilmiş bir satırdır." dosyam


Tüm bir dizeyi değiştirme

Bir komut çağırırken düz metin veya normal ifade kalıbı kullanırsanız, kalıpla eşleşen tüm satırlar değiştirilir:

$ sed "/ Bu / c Bu, değiştirilmiş bir metin satırıdır." dosyam


Dizeleri desenle değiştirme

Karakterlerin değiştirilmesi

y komutu, çağrıldığında kendisine iletilen verilere göre değiştirilerek tek tek karakterler üzerinde çalışır:

$ sed "y / 123/567 /" dosyam


Karakterlerin değiştirilmesi

Bu komutu kullanırken, tüm metin akışı için geçerli olduğunu hesaba katmanız gerekir, onu belirli karakter oluşumlarıyla sınırlayamazsınız.

Satır numaralarını görüntüleme

= komutunu kullanarak sed'i çağırırsanız, yardımcı program veri akışındaki satır numaralarını yazdırır:

$ sed "=" dosyam


Satır numaralarını görüntüleme

Akış düzenleyici, içeriklerinin önüne satır numaralarını yazdırdı.

Bu komuta bir kalıp iletirseniz ve sed -n anahtarını kullanırsanız, yalnızca kalıpla eşleşen satır numaraları yazdırılır:

$ sed -n "/ test / =" dosyam


Desenle eşleşen satır numaralarını yazdır

Bir dosyadan eklenecek verileri okuma

Yukarıda, sed çağrısında neyin ekleneceğini belirterek, bir akışa veri ekleme tekniklerine baktık. Bir dosyayı veri kaynağı olarak da kullanabilirsiniz. Bunu yapmak için, belirtilen dosyadan akışa veri eklemenizi sağlayan r komutunu kullanın. Ararken, dosyanın içeriğini veya bir şablonu eklemeniz gereken satır numarasını belirleyebilirsiniz.

Bir örnek düşünelim:

$ sed "3r yeni dosya" dosyam


Bir akışa dosya içeriği ekleme

Burada yeni dosyanın içeriği, dosyamın üçüncü satırından sonra eklenmiştir.

r'yi çağırdığınızda kalıbı uygularsanız şunlar olur:

$ sed "/ test / r yenidosya" dosyam


r komutunu çağırırken bir şablon kullanma

Dosyanın içeriği, desenle eşleşen her satırdan sonra eklenecektir.

Örnek

Aşağıdaki görevi hayal edelim. Başka bir dosyadan alınan verilerle değiştirilmesi gereken, kendi içinde anlamsız olan belirli bir karakter dizisinin bulunduğu bir dosya var. Yani, DATA karakter dizisinin yer tutucu görevi gördüğü yeni dosya dosyası olsun. DATA için değiştirilecek veriler verilerde saklanır.

sed akış düzenleyicisinin r ve d komutlarını kullanarak bu sorunu çözebilirsiniz:

$ Sed "/ DATA> / (r yenidosya d)" dosyam


Yer göstergesini gerçek verilerle değiştirme

Gördüğünüz gibi, sed çıktıya DATA yer tutucusu yerine veri dosyasından iki satır ekledi.

sonuçlar

Bugün sed akış düzenleyicisiyle çalışmanın temellerini ele aldık. Aslında, sed çok büyük bir konudur. Bunu öğrenmek, yeni bir programlama dili öğrenmekle karşılaştırılabilir, ancak temel bilgileri anladıktan sonra, ihtiyacınız olan herhangi bir düzeyde sed'de ustalaşabilirsiniz. Sonuç olarak, metinleri onunla işleme olanaklarınız yalnızca hayal gücünüzle sınırlı olacaktır.

Hepsi bugün için. Bir dahaki sefere awk veri işleme dilinden bahsedelim.

Sevgili okuyucular! Günlük işlerinizde sed kullanıyor musunuz? Eğer öyleyse, lütfen deneyiminizi paylaşın.

Birçoğunuz muhtemelen kendi amaçlarınız için sed akış metin düzenleyicisini kullandınız, değilse, size bundan memnuniyetle bahsedeceğim, daha ayrıntılı olarak deneyeceğim. Neden akış denir? Cevap basit - programdan geçen bir girdi metin belgesi hayal edin ve sonuç olarak bu dosyanın program tarafından işlenen başka bir biçimini elde edersiniz. Bir tür kıyma makinesi - eti ızgaraya göre koyarsınız - ya kıyma ya da başka bir şey alırsınız.

Yani, varsayılan olarak, bu yardımcı program zaten sisteminizde olmalı gibi görünüyor (benim durumumda, Debian 7.6'da zaten vardı), değilse, o zaman -

Metin ile:

başındaki "s" parametresi metnin değiştirilmesi gerektiğini belirtir, g - değiştirilen metnin sonunda - genel olarak yapılması gerekenler (dosya boyunca)

Örneğin, text.txt dosyamızda Sergey kelimesini Andrey ile değiştirmek ve tüm bunları textout.txt dosyasına yüklemek istiyoruz, devam edin:

sed "s / Sergey / Andrey / g" metni. txt> metin çıkışı. txt

Sonuç:

Özel karakterler için değişiklik yapmak istiyorsanız - örneğin, & karakteri için, o zaman özelden önce ihtiyacınız var. bir karakterle ters eğik çizgi "\" koyun, sed'in bir satırın başına dönmesi gerektiğini belirtmek gerekirse, "^" özel karakterini kullanın. Ayrıca, noktalı virgül - ";" ile ayırarak bir satıra 2 veya daha fazla değişiklik yazabilirsiniz. Örneğin, zaten değiştirilmiş textout.txt dosyasına işkence yapıyoruz. İlk olarak, textout.txt dosyasının mevcut içeriğini tekrar göstereceğim:

root @ testhostname: ~ # cat textout.txt

Andrey için test

Andrey için 2. Test

Andrey için Test 3

Şimdi komutu giriyoruz:

sed "s / for / \ & / g; s / ^ Test / Sergey / g" metni. metin> metin çıkışı2. txt

Böylece, kelimesi yerine & simgesini (özel karakterin önüne "\" ile girilir), ardından ayırma işaretini (böylece tüm değişikliklerin tek bir satırda yazılabilmesi için ->) koyarız. ";", "Test" satırının başındaki kelime yerine, olanların sonucu olarak Sergey kelimesini koyun:

Her şey istediğimiz gibi!

Ayrıca sed, günlükleri görüntülemek için iyi bir yardımcıdır. Örneğin, bugünün tarihinin tüm satırlarını (bizim durumumuzda 10 Ekim olsun) log dosyasından / var / log / mesajlarından testlog.txt dosyasına boşaltmamız gerekiyor, devam edelim:

sed - n "/ ^ Ekim 10 / p" / var / log / mesajlar> testlog. txt

burada -n parametresini ekledik ve ardından - '/ ^ 10 Ekim / - satırın 10 Ekim tarihinden başlaması gerektiği anlamına gelir, ardından p parametresi - yazdır (bu koşuldaki içeriği yazdır) anlamına gelir, ardından kaynak dosya ve bulunduğumuz dosya Filtre durumumuz için sonuçları bir kenara atalım, çalıştırın, testlog.txt dosyasının 10 Ekim'e özel neler içerdiğini görün:

İyi! Çok fazla satıra ihtiyacınız yoksa, ancak şartlı olarak sadece ilk satırdan beşinci satıra kadar almanız gerekiyorsa, mevcut sorgumuzu "|" ile ayırıyoruz. testlog.txt dosyasına boşaltmayı kaldırmak ve sed -n 1,5p yazmak - bu, ilk "1" den (virgülle ayrılmış) beşinciye (ifadenin sonundaki p - yazdır) yazdırmamız gerektiği anlamına gelir "5" satırı. Toplamda, şöyle bir şey elde ederiz:

sed - n "/ ^ Ekim 10 / p" / var / log / mesajlar | sed - n 1, 5p> test günlüğü - 5strok.txt

Sonuçları yüklediğimiz dosyanın sonuna taşınmış olmasına (testlog-5strok.txt) bir kez daha dikkatinizi çekiyorum, yaptığımız işlemlerin sonucunu görüyoruz:

sed akış düzenleyicisi, standart girdiden veya bir dosyadan alınan veriler üzerinde çalışan, etkileşimli olmayan bir metin düzenleyicisidir. Sed bilgileri satır satır düzenler.

sed editörüyle çalışmanın temellerini ele aldı. Bu kılavuz daha gelişmiş teknikleri kapsar.

takımları birleştirme

Bazen aynı anda birkaç komutu sed düzenleyicisine iletmek gerekir. Bu birkaç yolla yapılır.

Zaten bir sed test dosyanız yoksa aşağıdaki ortamı oluşturun:

CD
cp / usr / paylaşım / ortak lisanslar / BSD.
cp / usr / share / ortak lisanslar / GPL-3.
yankı "bu asla bitmeyen şarkı


ne olduğunu bilmeden

çünkü ... "> can sıkıcı.txt

sed standart girdi ve çıktı ile çalıştığından, elbette aynı satırda çeşitli sed komutlarını birlikte çağırabilirsiniz:

sed "s / ve / \ & /" can sıkıcı.txt | sed "s / insanlar / atlar /"

evet devam ediyor dostum
bazı atlar şarkı söylemeye başladı
ne olduğunu bilmeden
ve sonsuza kadar söylemeye devam edecekler
sadece çünkü...

Bu işe yarar, ancak sed'e yapılan birden fazla çağrı ek yük olur, daha fazla yer kaplar ve sed'in yerleşik özelliklerini kullanmaz.

Her komuttan önce eklenmesi gereken –e seçeneğini kullanarak aynı anda birden çok komutu sed öğesine iletebilirsiniz:

sed -e "s / ve / \ & /" -e "s / insanlar / atlar /" can sıkıcı.txt

Ayrıca noktalı virgül karakterini kullanarak komutları bir dizgede birleştirebilirsiniz. Bu yöntem öncekiyle aynı şekilde çalışır.

sed "s / ve / \ & /; s / insanlar / atlar /" can sıkıcı.txt

–e bayrağını kullanırken, tek tırnakları kesmenin gerekli olduğunu ve noktalı virgül kullanırken tüm komutların tek tırnak içinde listelenebileceğini unutmayın.

Aynı anda birden çok komut çağırmanın bu iki yöntemi oldukça uygundur, ancak basit bir komut satırı kullanmanız gereken zamanlar vardır.

Ayrıca = operatörünü de öğrenmelisiniz. Bu ifade, mevcut her satır arasına bir satır numarası ekler. Sonuç şöyle görünür:

sed "=" can sıkıcı.txt
1
bu asla bitmeyen şarkı
2
evet devam ediyor dostum
3
bazı insanlar şarkı söylemeye başladı
4
ne olduğunu bilmeden
5
ve sonsuza kadar söylemeye devam edecekler
6
sadece çünkü...

Şimdi numaralandırma biçiminin nasıl değiştiğini görmek için metni düzenlemeyi deneyin.

G komutu, varsayılan olarak mevcut satırlar arasına boş bir satır ekler.

sed "G" can sıkıcı.txt
_
bu asla bitmeyen şarkı
_
evet devam ediyor dostum
_
bazı insanlar şarkı söylemeye başladı
_
ne olduğunu bilmeden
_
ve sonsuza kadar söylemeye devam edecekler
_
sadece çünkü...

İkisini birleştirmeyi deneyin. İlk başta, bu komutların çıktısı, metin satırı ile numaralandırılmış satır arasında boş bir satır içerecek gibi görünebilir. Ancak çıktı şöyle görünür:

sed "=; G" can sıkıcı.txt
1
bu asla bitmeyen şarkı
_
2
evet devam ediyor dostum
_
3
bazı insanlar şarkı söylemeye başladı
_
4
ne olduğunu bilmeden
. . .
. . .

Bunun nedeni, = operatörünün çıktı akışını değiştirmesidir (bu, elde edilen çıktıyı daha fazla düzenleme için kullanamayacağınız anlamına gelir).

Bu, sed'e yapılan iki çağrıyla çözülebilir; burada ilk çağrı, ikincisi için basit bir metin akışı olarak değerlendirilir.

sed "=" can sıkıcı.txt | "G"
1
_
bu asla bitmeyen şarkı
_
2
_
evet devam ediyor dostum
_
3
_
bazı insanlar şarkı söylemeye başladı
. . .
. . .

Özellikle birden fazla komutu birleştiriyorsanız ve çıktı beklediğiniz gibi değilse, bazı komutların benzer şekilde çalıştığını unutmayın.

Gelişmiş adresleme

sed'in adreslenebilir komutlarının avantajlarından biri, normal ifadeleri ölçüt olarak kullanabilmeleridir. Bu, içeriği tam olarak bilinmeyen dosyalarla çalışabileceğiniz anlamına gelir.

sed "1,3s /.*/ Merhaba /" can sıkıcı.txt
Merhaba
Merhaba
Merhaba
ne olduğunu bilmeden
ve sonsuza kadar söylemeye devam edecekler
sadece çünkü...

Bunun yerine, yalnızca belirli bir desen içeren dizelerle eşleşen normal bir ifade kullanabilirsiniz. Bunu yapmak için, komuttan önce iki eğik çizgi (/) arasına arama desenini yerleştirmeniz gerekir.

sed "/ şarkı söylüyor / s / o / & yüksek sesle /" can sıkıcı.txt
bu asla bitmeyen şarkı
evet devam ediyor dostum
bazı insanlar yüksek sesle şarkı söylemeye başladı
ne olduğunu bilmeden
ve sonsuza kadar yüksek sesle söylemeye devam edecekler
sadece çünkü...

Bu örnekte, yüksek sesle kelime, şarkı söyleme kelimesini içeren her satırda ilk kelimenin önüne yerleştirilmiştir. Lütfen ikinci ve dördüncü satırların desenle eşleşmedikleri için değişmediğini unutmayın.

Adresleme için ifadeler karmaşık olabilir. Bu, ekipleri daha esnek hale getirir.

Aşağıdaki örnek, diğer komutlar için adresler oluşturmak üzere normal ifadelerin nasıl kullanılacağını gösterir. Bu komut tüm boş satırları bulur ve kaldırır:

sed "/ ^ $ / d" GPL-3
GNU GENEL KAMU LİSANSI
Sürüm 3, 29 Haziran 2007
Telif Hakkı (C) 2007 Free Software Foundation, Inc.
Herkesin birebir kopyalarını kopyalamasına ve dağıtmasına izin verilir
Bu lisans belgesinin değiştirilmesine izin verilmez.
önsöz
GNU Genel Kamu Lisansı ücretsiz, copyleft bir lisanstır.
. . .
. . .

Normal ifadelerin aralığın herhangi bir yerinde kullanılabileceğini unutmayın.

Örneğin, BAŞLANGIÇ ve END satırları arasındaki satırları silebilirsiniz:

sed "/ ^ START $ /, / ^ END $ / d" girdi dosyası

Unutmayın: bu komut, ilk bulunan START kelimesinden ilk bulunan END kelimesine kadar olan tüm satırları siler ve daha sonra tekrar START kelimesiyle karşılaşırsa, verileri silmeye devam eder.

Adreslemeyi tersine çevirmek için (yani, desenle eşleşmeyen satırları seçin), bir ünlem işareti (!) kullanın.

Örneğin, doldurulmuş herhangi bir satırı silmek için şunu girersiniz:

sed "/ ^ $ /! d" GPL-3

Adresin ters çevrilmesi için karmaşık bir ifade olması gerekmez. Ters çevirme, normal numaralandırma ile aynı şekilde çalışır.

Ek bir arabellek kullanma

Tutma arabelleği, sed'in çok satırlı düzenlemeler yapma yeteneğini artırır.

Ek bir arabellek, belirli komutlarla değiştirilebilen geçici bir depolama alanıdır.

Bu ekstra arabelleğe sahip olmak, diğer dizeler üzerinde çalışırken dizelerin saklanmasına izin verir.

Tampon komutları:

  • h: Geçerli işleme arabelleğini (üzerinde çalıştığınız son eşleşen satır) ek bir arabelleğe kopyalar.
  • H: Geçerli işleme arabelleğini, mevcut ek işlemenin sonuna \ n ile ayırarak ekler.
  • g: Mevcut ekstra arabelleği mevcut işleme arabelleğine kopyalar. Önceki işleme arabelleği kaybolacak.
  • G: Geçerli şablonu, \ n ile sınırlayarak geçerli işleme arabelleğine ekler.
  • x: Geçerli şablonu ve ek arabelleği değiştirin.

Ek arabelleğin içeriği, işleme arabelleğine taşınana kadar değiştirilemez.

Karmaşık bir örneğe bakalım.

Aşağıdaki komutla bitişik satırları birleştirmeyi deneyin:

sed -n "1 ~ 2h; 2 ~ 2 (H; g; s / \ n / /; p)" can sıkıcı.txt


Not: Aslında, sed bunun için ayrı bir yerleşik N komutu sağlar; ancak pratik için bu örneği dikkate almakta fayda var.

–n seçeneği otomatik çıktıyı bastırır.

1 ~ 2h, ilk satırdan başlayarak (yani her tek satırdan) metnin her ikinci satırını sırayla değiştiren bir adres tanımıdır. h komutu, eşleşen satırları ek bir arabelleğe kopyalar.

Komutun geri kalanı kaşlı ayraçlar içine alınır. Bu, komutun bu bölümünün az önce belirtilen adresi devralacağı anlamına gelir. Bu parantezler olmadan, adresi yalnızca H komutu devralır ve komutların geri kalanı her satır için yürütülür.

Elbette, daha önce bahsedilen yerleşik N komutu oldukça kısa ve basittir ve aynı sonucu verir:

sed -n "N; s / \ n / / p" can sıkıcı.txt
bu şarkı hiç bitmeyen evet uzayıp gidiyor dostum
bazı insanlar ne olduğunu bilmeden şarkı söylemeye başladı
ve sonsuza kadar söylemeye devam edecekler çünkü...

Sed betikleri

Komutlar, komut dosyalarında birleştirilebilir. Bu, tek bir hedef şablonda bir dizi komutu yürütmenize olanak tanır.

Örneğin, önceden biçimlendirmeniz gereken basit metin mesajları oluşturmak için bir komut dosyası yazabilirsiniz.

Bu şekilde her mesaj için aynı komutları tekrarlamak zorunda kalmazsınız. Temel olarak, bir sed betiği, belirli bir nesneye uygulanacak komutların bir listesidir.

Örneğin:

s / bu / bu / g
s / kar / yağmur / g
1.5s / çam kozalağı / kayısı / gr

Sonra dosya çağrılabilir:

sed -f sedScriptName dosyasıDüzenlemek için

Çözüm

Artık daha gelişmiş sed tekniklerini biliyorsunuz.

Sed komutlarının anlaşılması ilk başta zordur ve karıştırılması kolaydır. Bu nedenle, önemli veriler üzerinde kullanmadan önce bunları denemeniz önerilir.

Etiketler:,
Fok
Konunun devamı:
Yönlendiriciler

Masaüstüne Gigabit Ethernet gibi modern veri ve ses uygulamaları Kategori 5e için derecelendirilmiştir. Bu çözüm gerekli özelliklere sahiptir ...