sed örnekleri için kurulum
İşte çok fazla abartmamaya çalışacağım örneğe hazırlanmak için hızlı bir kılavuz.
"kelimeler" 1'den 100'e kadar sayıları içeren bir metin dosyasıdır. Oluşturulacak komuttan emin değilseniz, Bash Dışa Aktarma Komutunda xargs için Dışa Aktarma işlevine bakın. Bir sonraki kabuk komut dosyası görüşmenizde olabileceğini asla bilemezsiniz.
"bar", tek bir satır içeren bir metin dosyasıdır -.
"old-php", php7 veya sonraki sürümlerde kırılacak olan 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 Son Not'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 ayrıntılı olarak ele alınacağı, karşılık gelen eşdeğer komutlara sahip sed komutlarının örneklerinin bir listesi bulunmaktadır.
1. Rastgele bir satır yazdır (sıralama -R - | head -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 -e 's/0//g' -6. csv dosyasını tsv'ye dönüştürün (tr ',"\t' - eşdeğeri)
sed -e 's/,/\t/g' -7.Dosyaya satır ekle (kedi çubuğuna eşdeğer -)
'$a ---' -8. Dosyanın başına satırı ekle (cat - bar'a eşdeğer)
sed '1i ---' -9. Dosyadaki tüm satırları yazdırın (cat - eşdeğeri)
sed -n -e 'p' -10. Bir desenle eşleşen bir satır yazdırın (grep -e '^1' - eşdeğeri)
sed -n -e '/^1/ p' -11. Bir kalıpla eşleşen satırları silin (grep -v -e '^1' - eşdeğeri)
sed -e '/^1/ d' -12. Bir dosyadaki satır sayısını alın (wc -l - ile eşdeğer)
sed -n -e '$=' -13. Arka planda bir dosyaya yaz (eşdeğer komut te)
sed "w $1" -tee komutunu uygulamak için sed kullanan örnek
Hemen yukarıda, arka planda bir dosyaya yaz etiketli bir örnek var. tee komutu gibi sesler. peki, ö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 ()$# -eq 1 testi || dönüş;
sed "w $1" -
ana ()
sıra 10 | on numara;
kedi on
ana
Çıktı
12
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. Tee ile yazılmış dosyanın kedisinden aldığımız ikinci. 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
- Bir dosyadaki satır sayısını alır, L
- 1 ile L, R arasında rastgele bir sayı üretir
- R'yi yazdırır
İşlev, girdinin dışarıdan iletilmesini bekler.
Komutlar
bazı hat ()fonksiyon lc ()
sed -n -e '$=' -
;
işlev yazdırma satırı ()
sed -n -e "$1p" -
;
sıcaklık=$(mktemp);
kedi - > $temp;
kedi $temp | print-line $(( RANDOM % $( cat $temp | lc ) + 1 ));
rm $temp
Örnek kullanım (1)
sıra 100 | _Çıkış (1)
35Örnek kullanım (2)
https://linuxhint curl.com/bash_cut_command/ --sessiz | şerit etiketleri | bazı satırlarHTML 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ı satırı ()sed -n "$1p" -
Şimdi kelimeler üzerinde print-line kullandığımızda ne olduğunu görelim.
Komutlar
kelimeler | baskı hattı 50Çıktı
50Tamam. İyi görünüyor ama biraz daha az önemsiz görünen bir şey deneyelim.
Komutlar
-xf kelimelerini bildir-xf baskı satırı bildir
sıra 1 10 $( kelime | wc -l ) | xargs -i bash -c "kelimeler | baskı satırı "
Çıktı
111
21
31
41
51
61
71
81
91
Tamam. Şimdi 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
Bir 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 -e 's/^/#/' -İlk satırı sil
sed -e '1d' -
Son satırı sil
sed -e '$ d' -
Bir desenle eşleşen satırlardan önce bir satır ekle
'/0$/i ---' -
Bir desenle eşleşen satırlardan sonra bir satır ekle
'/0$/ ---' -
html etiketlerini çıkarın
sed -e 'ler/<[^>]*.//g' -
Php7 veya sonraki sürümlerde çalıştırmak için eski php kodundaki ereg'i yükseltin
sed 's/ereg(\([^,]*\).\([^)]*\)./strpos(\2,\1)/g'
sed'in belirli bir sürümden daha eski olup olmadığını kontrol edin
sed -e '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()yankı -n | sed "v $1" - 2>/dev/null
deneme sürümü ()
echo -n "Sürüm $1. Tamam. Yap ";
en fazla test-sed-versiyonu $1 &&
echo -n "eski";
doğru
||
echo -n "yeni"
;
yankı "yol."
ana ()
yerel v;
4'te v için.4,5;
yapmak
deneme sürümü $v;
bitti
ana
Çıktı
Sürüm 4.4. Tamam. eski yoldan yap.Sürüm 4.5. Tamam. Yeni yolla yap.
Bu karakterleri yazarken makinemde çalışan sed sürümünün 4 olduğunu unutmayın.4, yukarıdaki çıktıyı açıklayacak. Ayrıca, aynı zamanda, gnu sed'in en son sürümü 4 idi.7, sahip olduğumdan yaklaşık 3 yaş büyük. benim sed eski! Aslında, sed 4'te.0.6, version komutuna bir parametre eklendi, böylece bu strateji en az v4 olan herhangi biri için çalışıyor.0.Sürümün 2003'ün başlarında piyasaya sürüldüğü göz önüne alındığında hoşgörülü olan 6. İyisin.
Biraz fazladan araştırma yaptım, aslında HABER en son kaynak kodunu okuyor. Sürüm 4.6, betiği döken 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 soymak 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 -e 'ler/<[^>]*.//g' -
https://linuxhint curl.com/bash_cut_command/ --sessiz | şerit etiketleri
Mükemmel olduğunu söyleyemem ama en azından terminalde okunabilir.
İş 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 tam olarak emin olmadıkça, amaçlanandan bir karakter eksik olması 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ışı
- bulmak
- grep
- sed
bulmak
Burada değiştirilecek dosyaları seçeceksiniz. Bu satırlar boyunca bir komut kullanmanızı öneririm:
bul -type f -name | grep -v -e | xargs -i …Örneğin, dosyaları aşağıdaki gibi git deposu dizinleri hariç PHP dosyalarının yerini alacak şekilde sınırlamak isteyebilirsiniz.
find -type f -name \*.php | grep -v -e'.git' | xargs -i…Bash'deki xargs komutu hakkında daha fazla bilgi edinin.
grep
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 yalnızca varsa eşleşen dizeyi göstereceğini unutmayın.
find -type f -name \*.php | grep -v -e'.git' |xargs -i grep -e bazı_pattern -o
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.
find -type f -name \*.php | grep -v -e'.git' |xargs -i sed -i -e s/some_pattern/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… |
-e | -e ifade anlamına gelir. Parametresi sed dilinde bir ifadedir. Sed birçok kabul eder örneğin) sed -e 'ifade1' -e 'ifade2'…
|
-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…
|
Kullanılabilir 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
- grep
- kedi
- Tr
- 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,
kedi bazı dosya | sıralama -R - | kafa -1Ancak, borunun solundaki komut mevcut olduğunda, ipucunu aşağıdaki gibi atlayabiliriz.
kedi bazı dosya | sıralama -R | kafa -1Örneklerdeki komutlardan sonra - karakteriyle olan şey 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 ()
Eko ---
eski php ()
echo 'ereg($UA,"Bottybot")'
Sonuç olarak
Bash sed örnekleri yazmaktan keyif aldım ve hatta bu arada birkaç ekstra numara bile 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 edinmeyi sevdiyseniz, merak etmeyin daha dokunulacak çok şey var. üzerinde.