IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes POSIX Discussion :

supprimer les premiers caractères d'une ligne


Sujet :

Shell et commandes POSIX

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut supprimer les premiers caractères d'une ligne
    Bonjour,
    pas sûr de poster au bon endroit:
    j'ai un très gros fichier texte (+ de 800000 lignes). J'aimerais supprimer les 20 premiers caractères de chaque ligne.
    Existe t'il une commande simple ou un petit script pour le faire?
    Merci

  2. #2
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    man cut

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    206
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2009
    Messages : 206
    Points : 90
    Points
    90
    Par défaut
    Merci,
    je fais donc cut -c17-37 myfile.txt
    et ça affiche bien dans la fenêtre les caractères que je souhaite conserver. Cela dit, je n'arrive pas à écrire ces caractères dans le même fichier:
    cut -c17-37 myfile.txt > myfile.txt
    le fichier myfile.txt est vide??
    Il faut en fait passer par un fichier intermédiaire pour reconstruire après par copier-coller le fichier initial.

  4. #4
    Expert éminent sénior
    Avatar de Escapetiger
    Homme Profil pro
    Administrateur système Unix - Linux
    Inscrit en
    Juillet 2012
    Messages
    1 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Administrateur système Unix - Linux

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1 499
    Points : 11 210
    Points
    11 210
    Par défaut
    Si vous êtes joueur, fortement déconseillé sans affichage préalable (modification irrémédiable du fichier initial) :
    Boucle en une ligne de commande ...

    cat myfile.txt | while read ; do cut -c17-37 > myfile.txt ; done

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par cpalperou Voir le message
    Merci,
    je fais donc cut -c17-37 myfile.txt
    et ça affiche bien dans la fenêtre les caractères que je souhaite conserver. Cela dit, je n'arrive pas à écrire ces caractères dans le même fichier:
    cut -c17-37 myfile.txt > myfile.txt
    le fichier myfile.txt est vide??
    Ben oui. Unix est ainsi fait qu'il "fait" les redirections avant de lancer les process (en gros!). Donc il "exécute" D'ABORD le "> myfile.txt" (pour établir les file descriptors), ce qui efface complètement myfile.txt, puis ENSUITE il essaie de faire le cut... sur un fichier vide!

    Une solution simple (si on a assez de disque):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mv myfile.txt myfile.txt$$
    cut -c17-37 myfile.txt$$ > myfile.txt && rm -f myfile.txt$$

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par cpalperou Voir le message
    Bonjour,
    pas sûr de poster au bon endroit:
    j'ai un très gros fichier texte (+ de 800000 lignes). J'aimerais supprimer les 20 premiers caractères de chaque ligne.
    Existe t'il une commande simple ou un petit script pour le faire?
    Merci
    Tu ouvres le fichier avec emacs, puis tu tapes les 12 keystrokes suivants:
    Code emacs : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    M-<			;; beginning-of-buffer
    C-SPC			;; set-mark-command
    M->			;; end-of-buffer
    C-p			;; previous-line
    C-2			;; digit-argument
    C-0			;; digit-argument
    C-f			;; forward-char
    C-x r k			;; kill-rectangle
    C-x C-s			;; save-buffer


    ou avec sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i -e 's/^....................//' myfile.txt

  7. #7
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par jack-ft Voir le message
    ou avec sed:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -i -e 's/^....................//' myfile.txt
    En prenant un raccourci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r -i.bak 's/^.{20}//' myfile.txt
    Sinon avec cut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cut -b 21- myfile.txt > new_file.txt

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Supprimer les premiers caractères d'une chaine
    Par Balbuzard dans le forum Débuter
    Réponses: 16
    Dernier message: 16/12/2010, 10h42
  2. Supprimer les premiers caractères d'une chaîne
    Par supers dans le forum Word
    Réponses: 4
    Dernier message: 21/08/2009, 10h04
  3. Réponses: 5
    Dernier message: 20/02/2007, 17h16
  4. Supprimer les premiers 0 dans une chaîne
    Par supersmoos dans le forum Langage
    Réponses: 2
    Dernier message: 11/01/2007, 11h28
  5. Supprimer le premier caractère d'une chaine de caractères
    Par Droïde Système7 dans le forum Langage
    Réponses: 2
    Dernier message: 30/09/2005, 11h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo