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 GNU Discussion :

Rechercher une ligne dans un fichier et remplacer le dernier élément par le premier


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 64
    Points : 55
    Points
    55
    Par défaut Rechercher une ligne dans un fichier et remplacer le dernier élément par le premier
    Bonjour,

    soit le contenu :

    user1;AZERT;A
    user2;QSDSQD;B
    user222;QSDSQD;C
    user3;DSQDQ;D

    Je souhaiterais, lorsque je match "user2" (exactement ce terme, donc un grep -w), remplacer le dernier champs de ma ligne, par le champ grepé, autrement dit, je souhaiterais avoir :


    user1;AZERT;A
    user2;QSDSQD;user2
    user222;QSDSQD;C
    user3;DSQDQ;D

    Je sais travailler avec SED ou AWK sur une ligne individuelle, faire un truc du style : awk -F';' '/users2 {print $1;$2;$1}' mon fichier, mais ça ne me renvoie que la ligne, je voudrais que ça aille modifier la ligne DANS le fichier.

    Merci

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 251
    Points : 13 477
    Points
    13 477
    Par défaut
    Bonjour,

    beaucoup de questions dans ta question.

    • Pour changer un champ dans awk, tu peux le faire directement.
    • Ceci te permet de demander l'affichage de toutes les lignes par un 1.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      awk -F';' '/^user2/{$3=$1;} 1'
      Pourquoi 1? Car 1 est toujours vrai donc s'exécute pour toutes les lignes et il fait l'action par défaut puisque rien n'est précisé, c'est-à-dire l'affichage complet de la ligne.
    • Le dernier champ n'est pas forcément $3 mais est forcément $NF
    • Dans les regex, tu as \< pour signifier un début de mot et \> pour la fin. Ainsi, avec une regex bien construite, tu te passes de -w de grep.
    • Pour la modification de l'original, ce n'est pas le comportement de base. Cela va aussi dépendre de la version de tes outils.
      Avec sed, on rajoute l'option -i pour modifier l'originale. On peut avoir une sauvegarde de l'originale.
      Avec awk, cette option -i peut exister, sinon tu devras souvent faire appel à un ficher temporaire.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 64
    Points : 55
    Points
    55
    Par défaut
    Merci pour les infos c'est exactement ce que je voulais, plus des infos complémentaires !

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

Discussions similaires

  1. Remplacer une ligne dans un fichier texte !
    Par toulouz1 dans le forum VBScript
    Réponses: 23
    Dernier message: 19/07/2017, 10h26
  2. Réponses: 1
    Dernier message: 25/11/2014, 16h49
  3. Rechercher une ligne dans un fichier
    Par Knux14 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/06/2012, 09h23
  4. Remplacer une ligne dans un fichier ?
    Par FenX. dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 30/05/2008, 10h45
  5. Recherche dichotomique d'une ligne dans un fichier
    Par yarf dans le forum Général Java
    Réponses: 5
    Dernier message: 31/03/2008, 15h37

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