Bash Sed Örnekleri

Bash Sed Examples



Bash, (${var/pattern/replacement}) gibi değişken genişletme kullanarak kalıp değiştirme gerçekleştirmenize olanak tanır. Ve böylece, sed böyle yapar (sed -e 's/pattern/replacement/'). Ancak, sed için metin dosyalarındaki kalıpları değiştirmekten daha fazlası vardır. Burada, örneğin günlük görevlere yardımcı olmak için eşdeğer komutlar ve iş akışlarıyla sed'i yeniden keşfedeceğiz.

sed örnekleri için kurulum

İşte çok fazla abartmamaya çalışacağım örneğe hazırlanmak için hızlı bir kılavuz.







kelimeler1'den 100'e kadar sayıları içeren bir metin dosyasıdır. Komutu oluşturacağınızdan emin değilseniz, Bash Dışa Aktarma Komutunda xargs için Dışa Aktarma işlevi konusuna bakın. Bir sonraki kabuk komut dosyası görüşmenizde olabileceğini asla bilemezsiniz.



bartek satır içeren bir metin dosyasıdır —.



eski phpphp7 veya sonrasında bozulacak eski PHP satırlarını içeren bir metin dosyasıdır. (İpucu: erg)





Yukarıda açıklanan tüm işlevlerin aşağıdaki kurulum işlevlerine ilişkin Endnote'ta bulunabileceğini unutmayın.

Eşdeğer komutlarla Sed örnekleri

Komut satırı ortamında, belirli bir görev için birden fazla çözüm olduğunu göreceksiniz. Ancak, çoğunlukla, en az direnç gösteren yoldan gitmek istersiniz. Aşağıda, bazılarının aşağıda ayrıntılı olarak ele alınacağı, karşılık gelen eşdeğer komutlarla sed komutlarının örneklerinin bir listesi bulunmaktadır.



1. Rastgele bir satır yazdırın (sıralama -R – | kafa -1'e eşdeğer)

sed -n '$(( RANDOM % 100 ))P'-

2.Dosyadaki son satırı yazdırın (head -1 - eşdeğeri)

sed -n '$p'-

3. Bir dosyadaki ilk 10 satırı yazdırın (head -n 10 - eşdeğeri)

sed '10q'-

4. Bir dosyadaki ilk satırı yazdırın (kuyruk -1 - eşdeğeri)

sed -n '1p'-

5. Bir karakterin tüm örneklerini silin (tr –delete '0' - eşdeğeri, burada 0, silmek istediğimiz karakterdir)

sed -Ve 's / 0 // g'-

6. csv dosyasını tsv'ye dönüştürün (tr ',' ' ' - eşdeğeri)

sed -Ve 's/,/ /g'-

7.Dosyaya satırı ekleyin (kedi çubuğuna eşdeğer -)

sed '$ a ---'-

8. Dosyanın başına satırı ekleyin (cat – bar'a eşdeğer)

sed '1i---'-

9. Dosyadaki tüm satırları yazdırın (cat - eşdeğeri)

sed -n -Ve 'P'-

10. Bir desenle eşleşen bir satır yazdırın (grep -e '^1' - eşdeğeri)

sed -n -Ve '/^1/ s'-

11. Bir desenle eşleşen satırları silin (grep -v -e '^1' - eşdeğeri)

sed -Ve '/^1/ d'-

12. Bir dosyadaki satır sayısını alın (wc -l - ile eşdeğer)

sed -n -Ve '$ ='-

13. Arka planda bir dosyaya yazın (eşdeğer komut te)

sed 'içinde$ {1}'-

tee komutunu uygulamak için sed kullanan örnek

Hemen yukarıda, arka planda Bir dosyaya yaz etiketli bir örnek var. Kulağa tee komutu gibi geliyor. Öyle. Burada, sed kullanarak bash'ta tee'yi değiştirmek için bir fonksiyonun nasıl uygulanacağını genişleteceğiz.

Komutlar

tişört ()
{
Ölçek $ {#} -eq 1 || dönüş;
sed 'içinde$ {1}'-
}
ana()
tişörtBugün nasılsın;
kediBugün nasılsın

ana

Çıktı

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

Burada 1'den 10'a kadar tam sayıların iki listesini göreceksiniz. Birincisi seq komutundan. İkinci tee yazılan dosyanın kedisinden alıyoruz. Biliyorum saçma ama işe yarıyor!

Bir dosyada rastgele bir satır yazdırmak için sed kullanımına örnek

Bash ve biraz sed kullanarak bir dosyada rastgele bir satır yazdırmak istediğimizi varsayalım. Yapabilir miyiz? Evet yapabiliriz! İşte nasıl.

Bir işlevi uygulayın

  1. Bir dosyadaki satır sayısını alır, L
  2. 1 ile L, R arasında rastgele bir sayı üretir
  3. R'yi yazdırır

İşlev, girdinin dışarıdan iletilmesini bekler.

Komutlar

bazı satırlar()
{
işlevlc()
{
sed -n -Ve '$ ='-
};
işlevbaskı hattı()
{
sed -n -Ve '$ {1}P'-
};
sıcaklık= $( mktemp );
kedi-> ${temp};
kedi ${temp} |baskı satırı $((RASTGELE%$( kedi ${temp} |lc)+1 ));
rm ${temp}
}

Örnek kullanım (1)

sıra 100 |_

Çıkış (1)

35

Örnek kullanım (2)

https kıvırmak://linuxhint.com/bash_cut_command/ --sessiz |şerit etiketleri|bazı satırlar

HTML etiketlerini çıkarmak için sed kullanarak aşağıdaki örneğe bakın. Over örneğinin bazen boş satırlar için boş döndüğünü unutmayın. Bir egzersiz olarak, geliştirilebilir.

Bir dosyadaki satırları yazdırmak için sed kullanma

Bir dosyadaki belirli bir satırı yazdırmak için bash'ta bir işlev uygulamak istediğinizi varsayalım. Bash, head, tail veya awk'da bir döngü kullanarak bir dosyada tek bir satırı yazdırmaya çalışmak, bir dosyadaki satırları yazdırmak için çok fazla iştir. İyi ki seddik. sed kullanarak ortaya çıkan işlev aşağıdaki gibi olacaktır.

Komutlar

baskı hattı()
{
sed -n '$ {1}P'-
}

Şimdi kelimeler üzerinde print-line kullandığımızda ne olduğunu görelim.

Komutlar

kelimeler|baskı hattıelli

Çıktı

elli

Peki. İyi görünüyor ama biraz daha az önemsiz görünen bir şey deneyelim.

Komutlar

bildirmek -xfkelimeler
bildirmek -xfbaskı hattı
sıra 1 10$(kelimeler| tuvalet -NS ) | xargs-benbash -C 'kelimeler | baskı satırı {}'

Çıktı

1
on bir
yirmi bir
31
41
51
61
71
81
91

Peki. Şimdi bu daha çok benziyor! Bir dosyadaki herhangi bir satırı yazdırmak için bir bash betiğinde sed'nin nasıl kullanılabileceğini görüyorsunuz.

Eşdeğer komutları olmayan Sed örnekleri

Komut satırı ortamında, bazen en az direnç gösteren bir çözüme giden yol sed yoludur; aksi takdirde, ilk etapta gerekenden daha fazla iş yaparsınız. Bazı komutlar aşağıda gösterilebilir.

Bir kabuk betiğindeki tüm satırlara komut verin

sed -Ve 's/^/#/'-
İlk satırı sil
sed -Ve '1 gün'-
Silmekgeçenhat
sed -Ve '$ d'-
Bir desenle eşleşen satırlardan önce bir satır ekle
sed '/0$/i ---'-
Bir desenle eşleşen satırlardan sonra bir satır ekle
sed '/ 0 $ / ---'-
html etiketlerini çıkarın
sed -Ve 's /†*.// g'-
ereg'i yükseltiçindeçalıştırmak için eski php koduiçindephp7 veya üstü
sed 's/ereg(([^,]*).([^)]*)./strpos(2,1)/g'
Kontrol etmekEğer sedbelirli bir sürümden daha eski
sed -Ve 'v 4.5'-

Bash'de dallanma örneği sed versiyonu

Yukarıdaki örneklerde, bash'ta sürüm dallandırmayı uygulamak için kullanabileceğimiz sed'in belirli bir sürümden daha eski olup olmadığını kontrol etmek için bir satır vardır, bunun sürüm numaralarını sed –version çıktısından karşılaştırmak için bir işlev uygulamaya çalışmaktan daha kolay olduğuna inanıyorum. . Buradaki tek sorun, sed'in v komutunu desteklemeyen daha eski bir sürümü varsa, başımızın belada olmasıdır.

Komutlar

en çok test-sed-versiyonu() {
dışarı attı -n | sed 'v$ {1}'-2> /dev/boş
}
deneme sürümü()
{
dışarı attı -n 'Sürüm$ {1}. Peki. bunu yap';
en çok test-sed-versiyonu$ {1} && {
dışarı attı -n 'eskimiş';
NS
} || {
dışarı attı -n 'yeni'
};
dışarı attı ' yol.'
}
ana()
{
yerelv;
içinviçinde 4.{4,5};
yapmak
deneme sürümü$ {v};
tamamlamak
}
ana

Çıktı

Sürüm4.4. Peki. Eski yoldan yap.
Sürüm4.5. Peki. Bunu yeni yoldan yapın.

Bu karakterleri yazarken makinemde çalışan sed sürümünün yukarıdaki çıktıyı açıklayacak şekilde 4.4 olduğunu unutmayın. Ayrıca, aynı zamanda, gnu sed'in en son sürümü 4.7 idi, benimkinden yaklaşık 3 yıl daha eskiydi. Sed'im yaşlı! Aslında, sed 4.0.6'da version komutuna bir parametre eklendi, bu nedenle bu strateji en az v4.0.6 olan herhangi biri için çalışıyor, bu da sürümün 2003'ün başlarında piyasaya sürüldüğü göz önüne alındığında yumuşak.

Biraz fazladan araştırma yaptım, aslında HABER en son kaynak kodundan okuyor. Sürüm 4.6, betiği boşaltan ve çıktı satırlarına açıklama ekleyen –debug adlı yeni bir özelliğe sahiptir. Bu, bash içindeki işlevler tarafından oluşturulan sed komut dosyalarını kurallı forma çevirmenize olanak tanır. Güzel! Bash'de sed versiyonunun dallanmasına ihtiyacınız olduğunu unutmayın. Bu sed örneğinin devreye girdiği yer burasıdır.

HTML etiketlerini çıkarmak için sed kullanan örnek bash işlevi

Yukarıdaki örneklerde HTML etiketlerini çıkarmak için bir satır vardır. Bunu bir bash işlevine atalım ve yazdığım son makaledeki tüm HTML etiketlerini çıkarmak için kullanalım.

Komutlar

şerit etiketleri()
{
sed -Ve 's /†*.// g'-
}
https kıvırmak://linuxhint.com/bash_cut_command/ --sessiz |şerit etiketleri

Mükemmel olduğunu söyleyemem ama en azından terminalde okunabiliyor.

İş akışlarına sahip Sed örnekleri: Örnek iş akışı: find, grep ve sed kullanarak tümünü güvenle değiştirin

-i seçeneği ile sed kullanılarak yapılan değişikliklerin geri alınamaz olduğunu söylemek güvenlidir. Bu, hangi metnin değiştirileceğinden tamamen emin olmadıkça, amaçlanandan daha az karakterle karşılaşmanız muhtemeldir. Bu nedenle bu örnekte, seçtiğiniz tüm dosyalardaki metni güvenli bir şekilde değiştirmek için bir iş akışında sed kullanacağız.

iş akışı

  1. bulmak
  2. kavramak
  3. sed
bulmak

Burada değiştirilecek dosyaları seçeceksiniz. Bu satırlar boyunca bir komut kullanmanızı öneririm:

bulmak -tipF-isim | kavramak -v-Ve| xargs-i ...

Örneğin, dosyaları aşağıdaki gibi git depo dizinleri hariç PHP dosyalarının yerini alacak şekilde sınırlamak isteyebilirsiniz.

bulmak -tipF-isim*.php| kavramak -v -Ve '.git' | xargs -ben...

bash içindeki xargs komutu hakkında daha fazla bilgi edinin.

kavramak

Ardından, aşağıdaki gibi seçilen dosyalarda some_pattern eşleştirmeyi deneyeceğiz. grep için -o seçeneğini kullandığımızdan, çıktının varsa yalnızca eşleşen dizeyi göstereceğini unutmayın.

bulmak -tipF-isim*.php| kavramak -v -Ve '.git' |
xargs -ben kavramak -Vebazı_pattern-veya

Yukarıdaki komut, some_pattern ile eşleşen bir dize listesi döndürmelidir.

sed

Son olarak, some_pattern ile eşleşen tüm dizeleri değiştirmek istiyoruz. Bunu yapmak için grep'i aşağıdaki gibi sed'e dönüştürmemiz gerekiyor.

bulmak -tipF-isim*.php| kavramak -v -Ve '.git' |
xargs -ben sed -ben -Ves/bazı_pattern/yenisiyle değiştirme/G

grep komutu sed -i olur ve -o seçeneği kaldırılır. İşte buyur.

Artık şansınızı test etmek yerine sed'de hangi dizilerin değiştirileceğini önceden kontrol edebilirsiniz.

Örneklerde kullanılan seçeneklerle ilgili son notlar

İşte kısaca tartışılan sed örneklerinde kullanılan seçeneklerin bir listesi.

Seçenek Açıklama
-ben Yerinde düzenleyin. Girdi bir dosyaysa (boruya aktarılmamışsa), ifadelerin sonucu dosyanın içeriğinin üzerine yazılacaktır.

Sed birini kabul eder

örneğin) sed -n …

-Ve -e ifade anlamına gelir. Parametresi sed dilinde bir ifadedir.

Sed birçok kabul eder

örneğin) sed -e'expr1' -e'expr2'

-n İfadeden etkilenmeyen satırı gizler. Yani ifade sed dilinde bir print ifadesi ise, print ifadesinde yer almayan satırlar çıktıya dahil edilmeyecektir.

örneğin) sed -n …

Mevcut sed seçenekleri hakkında daha fazla bilgi için bkz. sed –help

Örneklerde kullanılan eşdeğer komutlarla ilgili son notlar

Aşağıdaki komut satırı yardımcı programları, eşdeğer komutlarla sed örneklerine dahil edilmiştir.

  • çeşit
  • kafa
  • kuyruk
  • kavramak
  • kedi
  • NS
  • tişört

Sondaki not - örnekte eşdeğer komutlar

Örnekteki – karakterine neler olduğunu merak ediyorsanız bu not tam size göre. Girişin bir boru yoluyla alınmasını beklediğimizi ima etmek için örneklerdeki çoğu komuttan sonra bir - karakteri ekledim. Yani,

kedibazı dosya| çeşit -R-| kafa -1

Ancak, borunun solundaki komut mevcut olduğunda, ipucunu aşağıdaki gibi atlayabiliriz.

kedibazı dosya| çeşit -R | kafa -1

Örneklerde komutlardan sonra gelen – karakteriyle olan buydu.

Kurulum için işlevlerle ilgili son notlar

Aramanız durumunda, yukarıdaki örnekler için kurulum işlevleri aşağıdadır. beyan -f kullanılarak elde edilen çıktı. Daha fazla kullanım için, bash'deki beyan komutu hakkında daha fazlasını okuyun.

Komutlar

kelimeler()
{
sıra 100
}
bar()
{
dışarı attı ---
}
eski php()
{
dışarı attı 'ereg ($ UA,' Bottybot ')'
}

Sonuç olarak

Bash sed örnekleri yazmaktan zevk aldım ve hatta yol boyunca birkaç ekstra numara aldım. Sed, metin dosyalarını işlemek için güçlü bir komut satırı yardımcı programı ve ifade dilidir. sed hakkında bilgi edinmekten hoşlanıyorsanız, merak etmeyin, daha dokunulacak çok şey var. Açık.