2009-02-20 24 views
35

Estoy tratando de buscar un archivo de texto para un cierto patrón. Si este patrón ocurre, significa que el resto de la línea no es necesaria y, por lo tanto, se puede eliminar.Búsqueda de Vim para un patrón y si ocurre eliminar al final de la línea

He intentado utilizar los siguientes comandos, pero hasta ahora no han tenido éxito.

:%s/{pattern}/d$ 

:g/{pattern}/d$ 

Si alguien tiene alguna sugerencia que sería muy apreciada

Respuesta

50

haría :%s/{pattern}.*// trabajo?

+0

He intentado lo siguiente para eliminar todo lo que después \\ en la siguiente línea en el archivo completo. Ejemplo de línea que contiene: prueba negro marrón azul \\ c \ d \ k - -:% s /\\.*// – Stryker

+0

no debería ser ':% s /\\\\.*//' (la barra invertida necesita ser backslashed) – mirod

+0

que fue mi pensamiento también, pero curiosamente funciona. tu solución también funciona Probado. – Stryker

29

Alternativamente, el siguiente también funciona

:g/{pattern}/normal nd$ 

por lo que quieres, me gustaría ir con la sugerencia de mirod. Lo que publique es un poco más flexible y podría ser útil en situaciones similares.

Explicación:

En cada línea, donde patrón coincide, ejecute los siguientes comandos del modo normal 'nd $'. Con el cursor al inicio de la línea, 'n' salta al patrón y 'd $' lo elimina al final de la línea.

+3

También puede usar 'norma nD' ya que' D' es sinónimo de 'd $'. – Conner

-1
%s/\\(replay-pattern-later\\) pattern2/\1/gc 

Esto reproducirá el patrón1 pero eliminará el patrón2. Usando "/ gc" para aplicar globalmente (sigue adelante) y solicita cada ocurrencia.

1

Para reemplazar un patrón y cualquier otra cosa que usan la expresión comodín regulares .*

:1,$s/pattern.*//g 
Cuestiones relacionadas