Remplacer des caractéres variable dans fichie

[Résolu/Fermé]
Signaler
-
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
-
Bonjour,

Sur un systeme Linux, j'ai la chaine suivante dans un fichier (sur un nombre de ligne x)
Automatique OK cr50-740392.20100719:012504-0 97 S 741
Automatique OK cr50-740392.20100719:012504-2 98 S 741
Automatique OK cr50-740392.20100719:012506-0 91 S 741

Chaque champ est séparé par une tabulation.
Je veux avoir en sortie, grâce a un script shell un fichier de ce genre :

Automatique OK 97 S 741
Automatique OK 98 S 741
Automatique OK 91 S 741

Pour résumer, je veux remplacer la chaine crxxxxxxxxxxxxxxxxxx par rien lorsque le dernier champ est égal a 741 et ne rien faire dans les autres cas.
Je débute en shell , je pense que cela est possible avec sed mais j'avoue que je patauge complétement.
D'avance merci de votre aide.

1 réponse

Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 381
Salut,

$ cat plop 
Automatique     OK      cr50-740392.20100719:012504-0   97      S       741
Automatique     OK      cr50-740392.20100719:012504-2   98      S       741
Automatique     OK      cr50-740392.20100719:012506-0   91      S       744
Automatique     OK      cr50-740392.20100719:012504-0   97      S       741
Automatique     OK      cr50-740392.20100719:012504-2   98      S       742
Automatique     OK      cr50-740392.20100719:012506-0   91      S       741

$ awk -F'\t' 'BEGIN { OFS="\t" } {if ($6 ~ /741/) { print $1,$2,$4,$5,$6 } else { print $0 }}' plop 
Automatique     OK      97      S       741
Automatique     OK      98      S       741
Automatique     OK      cr50-740392.20100719:012506-0   91      S       744
Automatique     OK      97      S       741
Automatique     OK      cr50-740392.20100719:012504-2   98      S       742
Automatique     OK      91      S       741

$

;-))
Messages postés
36324
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 381
Sinon pour le fun, avec "sed" ça donne ça (à condition que les chaines soient toujours construites de la même façon) :

sed '/741$/ s/\t[-a-z0-9:.][-a-z0-9:.]*//'

;-))