Forum Programmation.shell Problème sed

Posté par  . Licence CC By‑SA.
Étiquettes :
0
6
juil.
2023

Bonjour,
Je souhaite modifier le fichier ci-dessous et ajouter dans la ligne condition avant le /1 /6 et /4 le trigramme TST afin d'avoir un résultat de cette manière tout en gardant le contenu du fichier :

VariableXXXXTST/1

Auriez-vous une idée svp ?

Test.txt =

Extrait 1
Definiton : insert-ligne
Condition = machine/dev
Descritption : définition ligne

Extrait 2 :
Definiton 2 : insert-
Condition = machine-dev. OODEF VariableXXXX/1
Descritption : définition ligne

Extrait 3 :
Definiton 1 : insert-ligne
Condition = machine/dev. Traitementligne/6
Descritption : définition traitement

Extrait 4 :
Definiton 1 : isuppression
Condition = machine.ksh VariableX25XXX/4
Descritption : définition ligne

  • # try this ...

    Posté par  . Évalué à 3.

    • [^] # Re: try this ...

      Posté par  . Évalué à 2. Dernière modification le 07 juillet 2023 à 02:00.

      
      sed 's/^\(Condition.*\)\(\/[0-9]\)/\1TST\2/' Test.txt
      
      

      Résultat:

      
      Extrait 1
      Definiton : insert-ligne
      Condition = machine/dev
      Descritption : définition ligne
      
      Extrait 2 :
      Definiton 2 : insert-
      Condition = machine-dev. OODEF VariableXXXXTST/1
      Descritption : définition ligne
      
      Extrait 3 :
      Definiton 1 : insert-ligne
      Condition = machine/dev. TraitementligneTST/6
      Descritption : définition traitement
      
      Extrait 4 :
      Definiton 1 : isuppression
      Condition = machine.ksh VariableX25XXXTST/4
      Descritption : définition ligne
      
      

      Si tu veux modifier directement le fichier, tu utilises sed -i (mais personnellement j'évite. Je ne le fais que si le résultat sans option -i correspond à ce que je veux). Sinon en général je vais un mv du fichier source vers un fichier sauvegardé puis un sed > fichier source.

      • [^] # Re: try this ...

        Posté par  . Évalué à 3. Dernière modification le 07 juillet 2023 à 10:27.

        Bonjour

        … en général je vais un mv du fichier source vers un fichier sauvegardé puis un sed > fichier source. …

        On peut faire les deux en même temps avec sed
        et ajouter une extension qui servira à renommer la copie du fichier original :

        sed --in-place=$(date +_%Y%m%d-%T) 's/^\(Condition.*\)\(\/[0-9]\)/\1TST\2/' Test.txt
        

        ou bien, en utilisant cette même option
        mais sous sa forme raccourcie :

        sed -i$(date +_%Y%m%d-%T) 's/^\(Condition.*\)\(\/[0-9]\)/\1TST\2/' Test.txt
        
  • # comme ça

    Posté par  . Évalué à 1.

    sed '/^Condition.*[1-9]$/s/..$/TST&/'
    
    • [^] # Re: comme ça

      Posté par  . Évalué à 1.

      ou

      sed '/^Condition.*\/[1-9][1-9]*$/s/\/[1-9][1-9]*$/TST&/'

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.