¿Cómo eliminar la segunda columna en Vim?

12

Tengo un archivo delimitado por tabulaciones como:

name1   verb1   name2   verb2   etc...

Quiero borrar la segunda columna. Traté de editar una de estas respuestas , pero no estaba familiarizado con sedy awk, no pude.

¿Alguien puede ayudarme?

teaLeef
fuente
@KasiyA el OP original utilizado \ t para indicar pestañas.
Steeldriver
@steeldriver Ok tienes razón. Pensé que es parte de la línea. remoto. Pero he editado a una correcta según primer mensaje .thanks
αғsнιη
1
¿El modo de bloqueo visual de vim no resuelve el problema? (Ctrl-v en modo normal, seleccione la columna, xpara eliminar)?
Rmano
@Rmano ayuda, gracias, pero ¿podría decirme cómo ir al final del archivo en modo visual? (Intenté ctrl G, pero no funciona).
teaLeef

Respuestas:

10

En vim, deberías poder usar el comando

:%s/\t[^\t]*//

(sustituto TABseguido de cero o más ocurrencias de cualquier carácter, excepto TABsin nada). Si su archivo tiene solo dos columnas, puede usar uno ligeramente más simple :%s/\t.*o :%s/\t.*$que reemplace el primero TABy los siguientes caracteres hasta el final de la línea.

conductor de acero
fuente
22

La respuesta aceptada es mucho más elegante que esta (¡la he votado!), Pero si no la recuerda, puede usar vim el modo de bloqueo visual directamente. Abra vim y vaya (modo normal) a la primera esquina de la columna, así:

ingrese la descripción de la imagen aquí

Escriba CTRL-Vy puede mover el cursor para seleccionar la columna, esto está a medio camino:

ingrese la descripción de la imagen aquí

Para ir al final, presione G:

ingrese la descripción de la imagen aquí

el bloque parece roto porque estamos en la última línea que está en blanco; simplemente sube una línea (con la flecha hacia arriba o k) para verla de nuevo ...:

ingrese la descripción de la imagen aquí

Ahora simplemente presiona xpara eliminar el bloque:

ingrese la descripción de la imagen aquí

Rmano
fuente
6

Yo usaría cutpara esto

cut -f1,3- file.txt > newfile.txt
mv newfile.txt file.txt

También puede usar esto como un filtro dentro de vim (esto reemplazará todas las líneas en el archivo; también puede usar (por ejemplo) en 2,9lugar de %procesar las líneas 2-9 o seleccionar las líneas que desee V):

:%!cut -f1,3-

-f1,3-significa "campo de impresión uno, seguido del campo tres y todos los campos hasta el final de la fila". Por defecto, cutusa una pestaña como delimitador; Si necesita algo más, use la -dopción (ver man cut).

maldad
fuente
4

Puedes probar:

:%norm WdW

o manualmente usando el modo visual:

  1. Salte a la segunda columna (por ejemplo, presionando:) W.
  2. Comience el bloqueo visual por Ctrl+v.
  3. Seleccionar la segunda columna (por ejemplo, pulsando: W, G).
  4. Eliminarlo presionando d.

Para hacerlo en el lugar desde la línea de comando, intente:

$ ex +':exe ":%norm f\<Tab>dE"' -scx file

Relacionado: ¿Cómo escribir literal para la tecla Tab para usar para movimiento?

Ver también:

kenorb
fuente
Sí, +1, pero tenga en cuenta que si tiene líneas en blanco al final del paso 3) puede salir mal ...
Rmano