sed

Bash Sed Örnekleri

Bash Sed Örnekleri
Bash, ($var/pattern/replacement) gibi değişken genişletmeyi 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, metin dosyalarındaki kalıpları değiştirmekten daha fazlası vardır.  Burada, örneğin günlük görevlere yardımcı olacak 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.

"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ı

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. 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

  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ı 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ı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ı satırı ()

sed -n "$1p" -

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

Komutlar

kelimeler | baskı hattı 50

Çıktı

50

Tamam. İ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ı

1
11
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ışı

  1. bulmak
  2. grep
  3. 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.

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 -1

Ancak, 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.

En son OpenRA Strateji Oyununu Ubuntu Linux'a yükleyin
OpenRA, klasik Command & Conquer: Red Alert gibi erken Westwood oyunlarını yeniden yaratan bir Libre/Free Gerçek Zamanlı Strateji oyun motorudur. Dağı...
Gamecube & Wii için en yeni Dolphin Emulator'ı Linux'a yükleyin
Dolphin Emulator, seçtiğiniz Gamecube & Wii oyunlarını Linux Kişisel Bilgisayarlarda (PC) oynamanıza izin verir. Ücretsiz olarak kullanılabilen ve aç...
Linux'ta GameConqueror Cheat Engine Nasıl Kullanılır
Makale, Linux'ta GameConqueror hile motorunu kullanma hakkında bir kılavuzu kapsar. Windows'ta oyun oynayan birçok kullanıcı, oyun deneyimini geliştir...