sed - birkaç ardışık sübstitüsyon nasıl yapılır ancak dosyayı yalnızca bir kez nasıl işler?


31

Ardışık olması gereken birkaç değişiklik yapıyorsam, örneğin;

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/' t1_spec.rb
sed -i '/expect(browser.*\.should/s/\.should/).should/' t1_spec.rb
sed -i 's/\.should/\.to/' t1_spec.rb 
sed -i 's/==/eq/' t1_spec.rb 

Bunu yapmanın daha iyi bir yolu var mı, sadece t1_spec.file dosyasından bir kez geçecek ve dosya başına 4 kez geçmekten ziyade her satır için 4 yerine geçecek mi?

Yanıtlar:


43

Noktalı virgül kullanmanın yanı sıra, -ebayrağı kullanarak sed'e birden fazla ifade de verebilirsiniz :

sed -i -e 's/expr1/replace1/' -e 's/expr2/replace2/'  t1_spec.rb 

14

GNU’da (örn. Ubuntu makinemde), sadece çoklu hatların kullanılması desteklenir ve iyi çalışır ve süper uzun çizgilerden kaçınır, çünkü iyi görünür (örn.

sed -i '/^[[:space:]]*browser.*\.should/s/browser/expect(browser/
        /expect(browser.*\.should/s/\.should/).should/
        s/\.should/\.to/
        s/==/eq/' t1_spec.rb 

5

Tek tırnaklar arasındaki farklı alt bölümleri ayırmak için noktalı virgül kullanabilir veya tüm bu komutları bir dosyaya koyabilir ve dosyayı -fseçeneği ile belirtebilirsiniz sed.

Dosyayı kullanmak, özellikle aynı sedkomut dizisini tekrar tekrar kullanacaksanız kullanışlıdır . Eskiden kirli bir veri beslemesiyle uğraşmak zorunda kalıyordum ve zamanla massage.sedbeslemeden elde ettiğim genel hataların çoğunu otomatik olarak gidermek için çağrılan 88 satırlık bir dosya ile bitirdim.

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.