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?


@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.


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


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).


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:


Oui, +1, mais attention, si vous avez des lignes vierges à la fin de l'étape 3) peut aller de travers ...
Rmano
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.