Eliminar líneas que comienzan y contienen solo números enteros en Vim

Eliminar líneas que comienzan y contienen solo números enteros en Vim

Tengo un archivo que contiene números enteros (números de línea) y texto. Al extraer un archivo PDF, esos números de línea se colocaron en líneas separadas del texto y quiero eliminar todos esos números de línea. No soy muy hábil con las expresiones regulares, pero estoy 100% seguro de que no debería ser muy difícil. Yo uso vim/nvim, pero si tuviera que usar awk/sed eso también funcionaría para mí.

El archivo se parece a esto:

123
124
125

Text was found in
those three lines
should stay

Lo ideal es buscar: todas las líneas que comiencen con un número entero positivo (1,2,3...123456) y no contengan nada más que ese número entero. Deberían eliminarse.

Cualquier ayuda es muy apreciada.

Desafío de bonificación: por alguna razón, algunas líneas comienzan con ^L1234, por lo que hay un carácter especial adicional. En algún momento también querría eliminarlos. Sin embargo, pueden ser pasos separados.

Respuesta1

  • [0-9]es un simplerecopilaciónde dígitos que funciona en casi cualquier lugar. En Vim, también puedes usar \d(dígito decimal).
  • Quieres una o más instancias: agrega el \+multiplicador.
  • Eso debería ser lo único en la línea, por lo que la expresión regular debe serancladohasta el principio y el final (vía ^y $, respectivamente).
  • Quiere intentar una coincidencia en todas las líneas; en Vim, eso se hace a través de :global/{pattern}/.
  • Las líneas coincidentes deben ser :deleted.

Tomados en conjunto:

:global/^[0-9]\+$/delete

También puedes usar sed; es más rápido y funciona de forma no interactiva. Como esto aplica automáticamente cualquier regla a todas las líneas de entrada, no necesita el :global, y el :deleteestá dahí. Con -i, el reemplazo se realiza en el lugar (¡así que asegúrese de hacerlo bien y de tener una copia de seguridad del archivo original!)

sed -i -e '/^[0-9]\+$/d' file

Para el prefijo opcional, el multiplicador es \?. Si se trata ^Lde un solo carácter, probablemente necesites ingresarlo en Vim como <C-V><C-L>.

Respuesta2

Eliminar líneas que comienzan y contienen solo números enteros en Vim

:%s/^[0-9]\+\n//gc

Explicación

  • :%s//- búsqueda y reemplazo global
  • ^- empezar al principio de la línea
  • [0-9]- coincidir con dígitos
  • \+- partido codicioso uno o más
  • \ncoincidir con nueva línea (Nota: verifique los finales de línea, estos varían entre sistemas y pueden ser, por ejemplo, \r\nen su lugar)
  • gc- coincidencia global + confirmar (eliminar csi hay muchas o estás seguro)

Producción

123
124
125

Text was found in
those three lines
should stay

:%s/^[0-9]*\n//g

Text was found in
those three lines
should stay

Prima

Porla respuesta de terdon en U&L, ^Les el form feed character, que se puede eliminar usando sed:

sed 's/\o14//g' file 

Vale la pena leer esa respuesta para ver otras formas de hacerlo.

información relacionada