2010-08-26 21 views
22

Ben SOLARIS makineden UNIX Solarissed -i + what SOLARIS

aşağıdaki sed komutu kullanın aynı seçenek

sed -i '$ s/OLD/NEW/g' test   
sed: illegal option -- i 

can bazı birine sahip fikir nedir yerinde Solaris illegal seçeneği (linux "-i" seçeneği aynı etkiye sahip Solaris diğer seçenek)

lidia ihtiyaç

cevap

17

Sen tarafından -i davranışlarını kendini çoğaltmak gerekir sonuçların geçici bir dosyada saklanması ve orijinal dosyanın geçici dosya ile değiştirilmesi. Bu inelegant görünebilir ama hepsi sed -i kapakları altında yapıyor.

sed '$ s/OLD/NEW/g' test > test.tmp && mv test.tmp test 

Eğer mktemp kullanarak biraz daha sağlam yapabilir önem veriyorsanız:

TMP=$(mktemp test.XXXXXX) 
sed '$ s/OLD/NEW/g' test > "$TMP" && mv "$TMP" test 
+0

belki diğer seçenek Ben – lidia

+0

diğer dosyaya dosya taşımak için "yerinde" Dosya değiştiren tüm komut edemem aslında yapıyor bu makyaj kopyalamaya karşı hareketleri- kopyala. Bazı özel durumlar dışında, bir dosyayı yerinde değiştiremezsiniz. Eğer mv 'çalışmıyorsa belki de' cp 'olacak. –

+1

Komutunuz, değiştirilen dosyanın izinlerini de değiştirecektir. 'sed' bunu yapmayacak. Mv': '&& cat" $ TMP "> test && rm" $ TMP "' yerine 'cat' ve' rm' kullanmak daha iyi olabilir. – ceving

20

Tam sed -i ile aynı değildir, ama benzer bir sorunu vardı. hareket sadece tek dosyaları için çalışır/

perl -pi -e 's/find/replace/g' file 

kopyasını yapıyor: Bu kullanarak Perl yapabilirsiniz. Bir dizinde ve alt dizinlerdeki her dosyada bir metin değiştirmek isterseniz, yerinde olan bir şeye ihtiyacınız vardır. Eğer perl ile bunu ve bulabilirsiniz: awk dan

find . -exec perl -pi -e 's/find/replace/g' '{}' \; 
+0

En iyi drop-in değiştirme. Teşekkürler. – woot