2013-05-27 12 views
27

SED'i OS X Terminali üzerinden bulup yerine koymaya çalışıyorum.URL dizelerini hedef dizelerdeki "/" karakteriyle bulmak ve değiştirmek için SED nasıl kullanılır?

Ben metin dosyası boyunca saçılmış bu dizesi vardır düşünün: http://www.find.com/page

Ve bu dize ile değiştirmek istiyorum: Ben düzgün kaçmaya emin değilim çünkü http://www.replace.com/page

Sorun yaşıyorum veya dizelerimde "/" karakterini kullanın.

sed -i '' 's/cat/dog/g' file.txt 

kimse yerine Yalnızca aynı işlevselliği elde etmek konusunda herhangi bir fikir var mı: Mesela ben sadece "kedi" bulup "köpek" ile değiştirin isteseydim mükemmel çalışıyor aşağıdaki komutu buldum kedi ve köpek "/" karakterini kaplayan dizeleri veya URL'leri var mı? "/" Karakterlerinden kaçmak için birçok farklı yöntem denedim, ancak SED artık dizeyi "bulamıyor" gibi görünmüyor ve herhangi bir değişiklik yapmıyorsa & eylemleri değiştirin.

Herhangi bir yardım veya ipucu büyük takdir edilmektedir.

Teşekkürler!

cevap

73

/ sadece mümkün olanlardan biri, sed komutlar sınırlayıcı değildir. Bu örnekte, örneğin dizelerinizle çakışmadığından, ,'u kullanabilirsiniz;

echo 'I think http://www.find.com/page is my favorite' | 
    sed 's,http://www.find.com/page,http://www.replace.com/page,g' 
+0

Sed'in özel ayırıcıyı destekleme yeteneği, işleri daha az karmaşık hale getirir. Teşekkürler @Joachim! –

22

sed ayırıcı olarak "s" şu ne olursa olsun alabilir. Eğer URL ile çalışıyorsanız bu yana sizin ikame biter ve değiştirme başladığında sed karıştırmayın için / başka farklı ayırıcı kullanmak için iyi bir uygulamadır.

Ancak, siz de isterseniz kesinlikle / kullanabilirsiniz söyledikten. Sadece / literalinden kurtulmanız gerekiyor.

sed 's/http:\/\/www.find.com\/page/http:\/\/www.replace.com\/page/g' input_file 

veya şifreli daha şifreli sed yapmamak için farklı bir ayırıcı kullanabilirsiniz:

Yani, birini yapabilirsiniz.

sed 's#http://www.find.com/page#http://www.replace.com/page#g' input_file 
+0

Farklı sınırlayıcı fikirleri beğeniyorum –

+0

Bu yaklaşımı kullanarak, aşağıdakiler neden dosyayı herhangi bir değişiklik yapmadan gönderir? sed. #: 0.0.1 #: yeni yapı numarası # g 'some.yaml'. 1. Değişiklik meydana gelmiyor. 2. Sadece yazdırılan dosyanın yazdırılmasını istemiyorum. –

İlgili konular