2010-08-26 9 views
22

użyć następującego polecenia sed w UNIX Solarissed -i + co sama opcja w Solarisie

Od maszynie SOLARIS

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

może ktoś ma pomysł co nielegalne opcja w systemie Solaris (na miejscu „-i” opcja w linux muszę inną opcję w systemie Solaris z tym samym skutkiem)

Lidia

Odpowiedz

17

Musisz replikować zachowanie ruchowe -i „s przez siebie przechowywanie wyników w pliku tymczasowym, a następnie zastąpienie oryginalnego pliku plikiem tymczasowym. To może wydawać się nieeleganckie, ale to wszystko robi sed -i pod osłonami.

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

Jeśli dbasz można zrobić to nieco bardziej wytrzymałe stosując mktemp:

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

może inna opcja z awk nie mogę przenieść plik do innego pliku – lidia

+0

dowolne polecenie, który modyfikuje plik „na miejscu” jest rzeczywiście robi to make-copy-move- skopiuj losowo. Z wyjątkiem szczególnych przypadków nie można zmodyfikować pliku w miejscu. Jeśli 'mv' nie działa, być może będzie to' cp'. –

+1

Twoje polecenie zmodyfikuje również uprawnienia zmodyfikowanego pliku. 'sed -i' tego nie zrobi. Lepszym rozwiązaniem może być użycie 'cat' i' rm' zamiast 'mv':' && cat "$ TMP"> test && rm "$ TMP" '. – ceving

20

To nie jest dokładnie taka sama jak sed -i, ale miałem podobny problem. Można to zrobić przy użyciu Perl:

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

robi kopię/pracuje poruszać się tylko do pojedynczych plików. jeśli chcesz zamienić tekst na każdy plik w katalogu i podkatalogach, potrzebujesz czegoś, co działa. można to zrobić z Perl i znaleźć:

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

Najlepsza wymiana drop-in. Dzięki. – woot