2012-08-13 10 views

cevap

23

sed OS X'in versiyonu -i destekliyor, ancak hangi dosya uzantısı (hayır yedekleme için veya "") yedekleme dosyası için kullanılacak bunu anlatmak için bir bağımsız değişken gerektirir. BTW, sadece dosya adlarını almak için grep -l olmasını istiyorsunuz.

grep -l '/static' dir/* | xargs sed -i "" 's/\/static//g' 
+0

Çalıştı! Yedekleme dosyası için bir uzantı vermiyordum. Onu oradaki çaldırma işe yaradı. Bu, bir for döngüsünden geçmek için hatırlamak kesinlikle daha kolaydır. Teşekkürler! – davierc

3

Kullanım Perl:

$ perl -pi.bak -e '[email protected]/[email protected]@g' dir/* 
+0

Ben grep kullanarak bir cevap için umut ve ben Perl yalamak bilmiyoruz çünkü sed edildi. Cevap için teşekkürler. – davierc

+0

Bu sınırlı senaryoda, Perl 'sed' ile oldukça benzer. Basit 'sed' komut dosyalarını,' s2p' aracıyla Perl'e dönüştürebilirsiniz. – tripleee

1

Bir döngü kullanarak bunu yapabilirsiniz :

for file in $(grep -l '/static' dir/*) ; do 
    sed 's/\/static//g' $file > $file.$$ && mv $file.$$ $file 
done 

Ben .$$ ekini kullanmak ($$ akım Shel işlem kimliği olduğu l) mevcut dosya adları ile çarpışmaları önlemek için, ve sed komut nedense başarısız olursa && yerine ; giriş dosyasını clobbering önlemek için. Ayrıca, -l ekledim, böylece grep eşleşen satırlar yerine dosya adlarını yazdırır.

Yoksa (ben OSX üzerinde yapmak tam olarak nasıl emin değilim) GNU sed yükleyebilirsiniz.

+0

olmamalı '$ (grep --files-ile-eşleşmeler '/ statik' dir/*)' gibi maçlarla 'grep' komutu baskı dosya adları yerine hatları,? – Birei

+0

@Birei: Çok doğru (grep komutunu sorudan kopyaladım, daha dikkatli kontrol etmeliydim). Cevap güncellendi. –

+0

Kullanmakta olduğunuz ipucu için teşekkürler. Bu mükemmel çalışıyor ve daha fazla okumadan sonra tamamen anlıyorum. Darn utanç verici basit bir astarı kullanabileceğim bir iş yok. – davierc

İlgili konular