Lo que quiero hacer es añadir todas las líneas en una gran línea y reemplazar el contenido.
$ cat f
import java.io.File;
import java.io.File;
$ sed -n 'N
${
s/import java.io.File;/import java.io.IOException/
p
}' f
import java.io.IOException
import java.io.File;
Cómo funciona: primero, suprimir la impresión de línea, que es el comportamiento por defecto, pasando la opción -n
de sed.
Luego vienen los comandos sed.El primero es el comando N
: agrega una nueva línea y la siguiente línea de la secuencia a la actual, manteniéndose luego en el espacio del patrón. Esto cambiará la línea actual a la siguiente, y luego se agregará la siguiente línea ... hasta el final del archivo.
Al final del archivo y luego del comando N
que se ejecutará también en la última línea, el espacio del patrón contendrá todas las líneas. Luego, al final del archivo (que se especifica por la dirección de $
) que basta con sustituir la línea deseada con:
s/import java.io.File;/import java.io.IOException/
Desde el comando s///
hace sólo un reemplazo por iteración en el espacio de patrones por defecto, solo reemplazará la primera línea. Ahora el espacio del patrón tiene la línea reemplazada, pero no se imprimirá ya que usamos la opción -n
. Entonces, necesitamos imprimirlo con el comando p
. Una vez que ejecutaremos dos operaciones al final del archivo, lo direccionamos con $
y colocamos las operaciones entre corchetes ({}
).
Ahí, presentamos los comandos sed en más de una línea para mayor claridad. Podemos usarlos todos en una línea; simplemente separarlos por punto y coma: [? Cómo usar sed para reemplazar sólo la primera aparición en un archivo]
$ sed -n 'N;${s/import java.io.File;/import java.io.IOException/;p;}' f
import java.io.IOException
import java.io.File;
HTH
posible duplicado de (http://stackoverflow.com/questions/148451/how -to-use-sed-to-replace-only-the-first-occurrence-in-a-file) –