2010-08-26 21 views
22

utilizo el siguiente comando sed en UNIX Solaris-i + sed lo que la misma opción en SOLARIS

de la máquina SOLARIS

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

alguien puede tener idea de lo que la opción ilegal en Solaris (en su lugar opción "-i" en linux necesito otra opción en Solaris con el mismo efecto)

lidia

Respuesta

17

tendrá que repetir -i 's comportamiento por sí mismo almacenando los resultados en un archivo temporal y luego reemplazando el archivo original con el archivo temporal. Esto puede parecer poco elegante, pero eso es todo lo que sed -i está haciendo bajo las sábanas.

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

si se preocupan de que podría hacer un poco más robusto utilizando mktemp:

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

quizá otra opción de awk I Cant mover el archivo a otro archivo – lidia

+0

Cualquier comando que modifica un archivo "en su lugar" está haciendo realidad esta marca-copy-movi- copia aleatoria A excepción de ciertos casos especiales, no puede modificar un archivo en su lugar. Si 'mv' no funciona, tal vez' cp' lo haga. –

+1

Su comando modificará también los permisos del archivo modificado. 'sed -i' no hará eso. Podría ser mejor usar 'cat' y' rm' en lugar de 'mv':' && cat "$ TMP"> test && rm "$ TMP" '. – ceving

20

No es exactamente el mismo que sed -i, pero que tenía un problema similar. Puede hacer esto usando perl:

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

haciendo la copia/movimiento solo funciona para archivos individuales. si desea reemplazar algún texto en cada archivo en un directorio y subdirectorios, necesita algo que lo implemente. usted puede hacer esto con el Perl y encontrar:

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

El mejor reemplazo directo. Gracias. – woot

Cuestiones relacionadas