Cómo eliminar texto completo desde el principio de una línea con una determinada cadena

Cómo eliminar texto completo desde el principio de una línea con una determinada cadena

Utilizo sed -n '/string/,$p' file >> otherfilepara copiar texto de una línea con cierta cadena a otro archivo.

Ahora quiero que el texto copiado se elimine en el archivo original. Probé diferentes métodos con sed y awk pero nada funcionó.

¿Cómo usar sed para eliminar el texto de un archivo desde la línea inicial que contiene una determinada cadena?

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

¿O sería más fácil cortar en lugar de copiar con sed y cuál sería el comando en su lugar?

Respuesta1

PuedewEscriba un rango direccionado de líneas en un nuevo archivo y luegodelimine el rango: la parte complicada es evitar que el dcomando sea tratado como parte del nombre del archivo de salida. En GNU sed, puedes hacerlo dividiendo la escritura y la eliminación en expresiones separadas usando-e

NOTA IMPORTANTE: esto se truncará otherfileen lugar de agregarse

sed -i.bak -e '/string/,${w otherfile' -e 'd;}' file

Respuesta2

¡O usa ed!

ed -s file <<< $'/textb/,$w otherfile\n/textb/,$d\nw\nq'

Dada su opiniónarchivode:

texta

texta1

textb    <- string, delete rest of the text from here

textb1

textc

textc1

Después de ejecutar el edcomando,archivose convierte en:

texta

texta1

(hay una línea en blanco al final que desaparece en el formato aquí); yotro archivocontiene:

textb    <- string, delete rest of the text from here

textb1

textc

textc1

Los edcomandos son:

  • /textb/,$w otherfile- escribe ese rango de líneas enotro archivo
  • /textb/,$d- eliminar ese rango de líneas
  • w-- escribe el archivo modificado en el disco
  • q-- renunció

Respuesta3

Si usas este comandosed -n '/string/,$p' file >> otherfile para extraer todas las líneas de unaque contiene stringhasta el final del archivo ( $) a otro archivo.

La forma más sencilla de extraer el complemento de that es complementar la coincidencia:

sed '/string/,$d' file >> someOtherDifferentFile

Y si desea o necesita actualizar el archivo original, simplemente copie el resultado.

Que es lo que -ihace la opción sed, por lo que actualizará el archivo original:

sed -i.bak '/string/,$d' file

información relacionada