web-dev-qa-db-fra.com

Supprimer la première colonne avec vim

J'ai un fichier texte.

number 1_1 \t number1_2 \t etc
number 2_1 \t number2_2 \t etc

Je souhaite supprimer la première colonne de ce fichier (correspondant à numéro1_1, numéro2_1, etc., c'est-à-dire aux nombres précédant le premier onglet pour chaque ligne). J'ai lu cet article qui propose une solution pour supprimer la première colonne (voir la réponse de Peter). Cependant, cela ne fonctionne pas pour moi car les nombres ont des tailles différentes et je ne peux pas répéter l'opération pour supprimer la première colonne. Comment puis-je faire alors?

7
bigTree

Ceci devrait supprimer tous les caractères avant et incluant le 1er onglet sur n'importe quelle ligne:

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

Ligne de commande cut:

cut -f 2- {filename.txt} > {filenamenew.txt}

couper par défaut aux onglets; si vous voulez quelque chose d'autre comme un espace, ajoutez -d " ". -f est des champs à copier. 2- signifie tout de (et incluant) la colonne 2.

6
Rinzwind

Par awk,

awk -F"\t" '{print FS,$2}' file > newfile

Il coupe la première colonne et n'imprime que l'onglet restant et la deuxième colonne.

Par sed,

sed -r 's/^([^\t]*)\t(.*)$/\t\2/g' file > newfile
4
Avinash Raj

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

Sur chaque ligne (%), remplacez (s/ORIGINAL/REPLACEMENT/) la première occurrence de "caractères autres que des tabulations ([^\t], dans n'importe quel nombre (*)) suivie d'un tabulation \t" par rien. Vous pouvez taper Tab au lieu de \t.

Vous pouvez également faire correspondre la séquence de caractères la plus courte (.\{-}) se terminant par un onglet. .*\t correspondrait à la correspondance la plus longue pour .*, de sorte qu'il correspondrait à toutes les colonnes sauf la dernière; .\{-} correspond à la correspondance la plus courte qui est la première colonne.

:%s/.\{-}\t//

3
Gilles

Dans Vi pour supprimer la première colonne (séparés par un espace), vous pouvez faire:

:%norm dW

pour une colonne séparée par Tab, c'est:

:%norm dfCtrl+VTab

Ainsi, la commande qui supprimerait la première colonne du fichier (sur place) peut être:

ex +"%norm df$(echo -e '\t')" -scwq file

Pour vérifier le résultat avant de sauvegarder (test à sec), remplacez -scwq par -sc'%p|q!'.

Ou basé sur suggestion de Chris , comme:

ex -c':exe ":%norm df\<Tab>"' -sc'%p|q!' <(echo -e "a a\tb b\tc c")

Vous pouvez également le faire en mode visuel (si vous partez du coin supérieur gauche):

  1. Entrez visual-block by Ctrl+v.
  2. Sautez à la fin et sélectionnez la première colonne en appuyant sur: GE (ou ajustez manuellement).
  3. Presse d supprimer le bloc sélectionné.
3
kenorb

Pour supprimer l'espace restant avant la deuxième colonne, je suggère:

:%norm dfCtrl+VTabxname__

0
SergioAraujo