Comment supprimer la deuxième colonne dans Vim?

12

J'ai un fichier délimité par des tabulations comme:

name1   verb1   name2   verb2   etc...

Je veux supprimer la deuxième colonne. J'ai essayé de modifier l'une de ces réponses , mais je ne connaissais pas sedet awkje n'ai pas pu.

Quelqu'un peut-il m'aider?

teaLeef
la source
@KasiyA l'original du PO utilisé \ t pour indiquer les onglets.
Steeldriver
@steeldriver Ok vous avez raison. Je pensais que cela faisait partie de la ligne. supprimé. Mais j'ai édité pour en corriger un selon le premier post .thanks
αғsнιη
1
Le mode vim visual-block ne résout pas le problème? (ctrl-v en mode normal, sélectionnez la colonne, xà supprimer)?
Rmano
@Rmano ça aide merci, mais pourriez-vous me dire comment aller à la fin du fichier en mode visuel? (J'ai essayé ctrl G, mais cela ne fonctionne pas).
teaLeef

Réponses:

10

Dans vim, vous devriez pouvoir utiliser la commande

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

(substitut TABsuivi de zéro ou plusieurs occurrences de n'importe quel caractère sauf TABavec rien). Si votre fichier ne comporte que deux colonnes, vous pouvez utiliser un texte légèrement plus simple :%s/\t.*ou :%s/\t.*$qui remplace le premier TABet tous les caractères suivants jusqu'à la fin de la ligne.

tournevis
la source
22

La réponse acceptée est beaucoup plus élégante que celle-ci (je l'ai votée!) Mais si vous ne vous en souvenez pas, vous pouvez utiliser directement le vim mode de blocage visuel . Ouvrez vim et allez (mode normal) dans le premier coin de la colonne, comme ceci:

entrez la description de l'image ici

Tapez CTRL-Vet vous pouvez déplacer le curseur pour sélectionner la colonne, c'est à mi-chemin:

entrez la description de l'image ici

Pour aller à la fin, appuyez sur G:

entrez la description de l'image ici

le bloc semble cassé car nous sommes sur la dernière ligne qui est vide; il suffit de remonter d'une ligne (avec la flèche vers le haut ou k) pour la revoir ...:

entrez la description de l'image ici

Maintenant, vous appuyez simplement sur xpour supprimer le bloc:

entrez la description de l'image ici

Rmano
la source
6

J'utiliserais cutpour ça

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

Vous pouvez également l'utiliser comme filtre dans vim (cela remplacera toutes les lignes du fichier; vous pouvez également utiliser (par exemple) 2,9au lieu de %traiter les lignes 2 à 9, ou sélectionner les lignes avec lesquelles vous souhaitez V):

:%!cut -f1,3-

-f1,3-signifie «imprimer le champ un, suivi du champ trois et de tous les champs jusqu'à la fin de la ligne». Par défaut, cututilise un onglet comme délimiteur; si vous avez besoin d'autre chose, utilisez l' -doption (voir man cut).

evilsoup
la source
4

Vous pouvez essayer soit:

:%norm WdW

ou manuellement en utilisant le mode visuel:

  1. Sautez dans la deuxième colonne (par exemple en appuyant sur:) W.
  2. Démarrez visual-block par Ctrl+v.
  3. Sélectionnez la seconde colonne (par exemple en appuyant sur: W, G).
  4. Supprimez-le en appuyant sur d.

Pour le faire sur place à partir de la ligne de commande, essayez:

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

Connexe: Comment écrire un littéral pour la touche Tab à utiliser pour le mouvement?

Voir également:

Kenorb
la source
Oui, +1, mais attention, si vous avez des lignes vierges à la fin de l'étape 3) peut aller de travers ...
Rmano