Sed neden tüm olayların yerini almıyor?


118

Bu kodu bash'da çalıştırırsam:

echo dog dog dos | sed -r 's:dog:log:'

çıktı verir:

log dog dos

Tüm köpek oluşumlarının yerini almasını nasıl sağlayabilirim?


2
gKüresel ikame için bayrağa ihtiyacınız var, buradaki -rseçeneğe de ihtiyacınız yok.
— Chris Seymour

Yanıtlar:


188

gSed , şablon tamponunun içeriğinin genel bir ikamesini gerçekleştirecek şekilde değiştiriciyi eklemelisiniz :

echo dog dog dos | sed -e 's:dog:log:g'

Sed ile ilgili harika dokümantasyon için http://www.grymoire.com/Unix/Sed.html adresini kontrol edin . Bu küresel bayrak burada açıklanmıştır: http://www.grymoire.com/Unix/Sed.html#uh-6

İçin resmi belgeler http://www.gnu.org/software/sed/manual/ adresindeGNU sed mevcuttur.


1
Buraya GNU sed için bir köşe durumu eklemek: sed -E 's,foo,bar,g'küresel bir şey yapmaz. Eğer değiştirirsen sed -E -e 's,foo,bar,g'işe yarıyor.
— Melvyn Sopacua

23

gSonuna bir koymalısınız , "global" anlamına gelir:

echo dog dog dos | sed -r 's:dog:log:g'
                                     ^

1
mevcut olmayan sed -r yerine sed -e kullanılmalıdır.
— Dylan Daniels

1
@DylanDaniels Ubuntu'ya göre man sed, -rseçenek "genişletilmiş normal ifadeler kullan" anlamına gelir. Bu nedenle verilen komut, çalışması için genişletilmiş normal ifadelerin özelliklerine ihtiyaç duymasa da iyi çalışıyor.
— Craig McQueen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.