web-dev-qa-db-fra.com

Comment supprimer la deuxième colonne dans Vim?

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 n'étant pas familier avec sed et awk, je ne pouvais pas.

Quelqu'un peut-il m'aider?

12
teaLeef

Dans vim, vous devriez pouvoir utiliser la commande

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

(remplacer TAB suivi de zéro ou plusieurs occurrences de tout caractère sauf TAB avec rien). Si votre fichier ne contient que deux colonnes, vous pouvez utiliser un :%s/\t.* ou :%s/\t.*$ légèrement plus simple qui remplace le premier. TAB et any caractères suivants jusqu'à la fin de la ligne.

9
steeldriver

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

enter image description here

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

enter image description here

Pour aller à la fin, appuyez sur G:

enter image description here

le bloc semble cassé parce que nous sommes sur la dernière ligne qui est vide; montez simplement d'une ligne (avec la flèche vers le haut ou k) pour la revoir ...:

enter image description here

Maintenant, vous appuyez simplement sur x pour supprimer le bloc:

enter image description here

19
Rmano

Je voudrais utiliser cut pour cela

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

Vous pouvez également utiliser cela comme filtre dans vim (cela remplacera toutes les lignes du fichier; vous pouvez également utiliser (par exemple) 2,9 au lieu de % pour traiter les lignes 2 à 9, ou sélectionner les lignes souhaitées avec 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, cut utilise un onglet comme délimiteur; si vous avez besoin de quelque chose d'autre, utilisez l'option -d (voir man cut).

6
evilsoup

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. Commencer le bloc visuel par Ctrl+v.
  3. Sélectionnez la deuxième colonne (par exemple, en appuyant sur: WG).
  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

Connexes: Comment écrire littéralement pour la touche Tab utiliser pour le mouvement?

Voir également:

3
kenorb