2010-11-08 19 views
9

Estoy usando sed para reemplazar una línea con NULL en un archivo. El comando que utilicé essed -i opción no funciona en solaris

sed -i "s/.*shayam.*//g" FILE 

Esto funciona bien en Linux. shayam se reemplaza con blanco en el ARCHIVO. Pero cuando utilicé esto en Solaris está mostrando algún error.

SED: opción ilegal - i

cómo utilizar la funcionalidad de sed -i de Solaris. Amablemente ayuda.

Respuesta

11

La opción -i es GNU-específico. La versión de Solaris no es compatible con la opción.

Usted tendrá que instalar la versión de GNU, o cambiar el nombre del archivo nuevo sobre el viejo:

sed 's/.shayam.//g' FILE > FILE.new && mv FILE.new FILE 
+0

Usando mktemp ayuda a asegurar que no pisamos sin darse cuenta, en cualquier archivo con nombre FILE.new ... tmp = $ (mktemp) && sed -e 's /.* shayam. * // g' ARCHIVO> "$ tmp" && mv "$ tmp" ARCHIVO; rm "$ tmp" 2>/dev/null –

0

O bien cat el archivo o intente <? Luego canalice (|) el resultado a un archivo temporal y, si todo va bien (&&) mv, el archivo temporal al archivo original.

Ejemplo:

cat my_file | sed '!A!B!' > my_temp_file && mv my_temp_file my_file 
2

sed doesn't haven an -i option.

Probablemente esté utilizando alguna variante específica del fabricante de sed. Si desea utilizar las extensiones no estandarizadas específicas del proveedor de su variante no estandarizada específica de proveedor de sed, debe asegurarse de instalar dicha variante no estandarizada específica del proveedor y debe asegurarse de llamar al es y no llame a la versión compatible con los estándares de sed que es parte de su entorno operativo.

Tenga en cuenta que, como siempre, al utilizar extensiones no estandarizadas específicas del proveedor, no hay absolutamente ninguna garantía de que su código sea portátil, que es exactamente el problema que está viendo.

En este caso particular, sin embargo, hay una solución mucho mejor: use la herramienta adecuada para el trabajo. sed es un editor de secuencia (es por eso que es llamado "sed"), es decir, es para editar secuencias, no archivos.Si desea editar archivos, utilice un editor archivo, como ed:

ed FILE <<-HERE 
    ,s/.shayam.//g 
    w 
    q 
HERE 

Ver también:

11

acabo respondieron a un semejante pregunta sed -i + what the same option in SOLARIS, pero para aquellos que encuentran este hilo en su lugar (lo vi en la sección relacionada del hilo):

El problema principal que veo con la mayoría de las respuestas es que no funciona si quiere modificar varios archivos. La respuesta que he dado en el otro hilo:

No es exactamente el mismo que sed -i, pero que tenía un problema similar. Usted puede hacer esto utilizando Perl:

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

hacer la copia/movimiento sólo funciona para archivos individuales. si desea reemplazar texto en todos los archivos de un directorio y en los subdirectorios , necesita algo que lo haga funcionar. usted puede hacer esto con Perl y encontrar:

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