Come eliminare la seconda colonna in Vim?


12

Ho un file delimitato da tabulazioni come:

name1   verb1   name2   verb2   etc...

Voglio cancellare la seconda colonna. Ho provato a modificare una di queste risposte , ma non avendo familiarità con , sede awknon potevo.

Qualcuno può aiutarmi?


@Kasiy: l'originale dell'OP utilizzato \ t per indicare le schede.
Steeldriver,

@steeldriver Ok hai ragione. Ho pensato che fosse parte della linea. rimosso. Ma ho modificato per correggerne uno secondo il primo post .thanks
αғsнιη

1
la modalità di blocco visivo di VIM non risolve il problema? (ctrl-v in modalità normale, selezionare la colonna, xper eliminare)?
Rmano,

@Rmano aiuta grazie, ma potresti dirmi come andare alla fine del file in modalità visiva? (Ho provato Ctrl G, ma non funziona).
teaLeef

Risposte:


10

In vim, dovresti essere in grado di usare il comando

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

(sostituto TABseguito da zero o più occorrenze di qualsiasi personaggio tranne che TABcon nulla). Se il tuo file ha solo due colonne, puoi usarne una leggermente più semplice :%s/\t.*o :%s/\t.*$che sostituisce il primo TABe tutti i caratteri seguenti fino alla fine della riga.


22

La risposta accettata è molto più elegante di così (l'ho votata!) Ma se non la ricordi puoi usare direttamente la vim modalità di blocco visivo . Apri vim e vai (modalità normale) al primo angolo della colonna, in questo modo:

inserisci qui la descrizione dell'immagine

Digita CTRL-Ve puoi spostare il cursore per selezionare la colonna, questo è a metà strada:

inserisci qui la descrizione dell'immagine

Per andare alla fine, premere G:

inserisci qui la descrizione dell'immagine

il blocco sembra rotto perché siamo sull'ultima riga che è vuota; basta andare su una riga (con la freccia su o k) per vederlo di nuovo ...:

inserisci qui la descrizione dell'immagine

Ora premi semplicemente xper eliminare il blocco:

inserisci qui la descrizione dell'immagine


6

Vorrei usare cutper questo

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

Puoi usarlo anche come filtro all'interno di vim (questo sostituirà tutte le linee nel file; potresti anche usare (per esempio) 2,9invece di %elaborare le linee 2-9 o selezionare le linee che vuoi con V):

:%!cut -f1,3-

-f1,3-significa "stampa il campo uno, seguito dal campo tre e da tutti i campi fino alla fine della riga". Per impostazione predefinita, cututilizza una scheda come delimitatore; se hai bisogno di qualcos'altro, usa l' -dopzione (vedi man cut).


4

Puoi provare:

:%norm WdW

o manualmente usando la modalità visiva:

  1. Passa alla seconda colonna (ad esempio premendo:) W.
  2. Avvia blocco visivo di Ctrl+v.
  3. Selezionare seconda colonna (ad esempio, premendo il tasto: W, G).
  4. Eliminalo premendo d.

Per farlo sul posto dalla riga di comando, prova:

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

Correlati: Come scrivere letterale per il tasto Tab da usare per il movimento?

Guarda anche:


Sì, +1, ma attenzione che se hai righe vuote alla fine del passaggio 3) può andare storto ...
Rmano,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.