|
|
|
|
Bonjour,
J'essaye de remplacer une chaine de caracteres qui est stockée dans une variable et ensuite d'effectuer une recherche puis un remplacement dans un fichier.
voici un petit bout du script:
mot_a_rechercher="toto"
fic=/usr/users/toto/fichier
#Ouverture du fichier et invocation de la variable shell puis remplacement de ce mot par * $mot commentaire
cat $fic | awk -v myvar="$mot_a_remplacer '{sub('/'myvar'/\* 'myvar' commentaire)} {print}'
#A la fin je souhaite trouver comme resultat un cat du fichier avec le remplacement de la chaine de caracteres modifiée avec la meme position de ligne
Les questions sont les suivantes:
-Comment invoquer ma variable dans un programme awk?
-Comment utiliser le sub de awk en y inserant cette variable?
Remarques:
J'utilise un awk car ce bout de script est utilisé dans une boucle FOR, si j'utilise un SED, je me retrouve avec plusieurs contenu de fichier. Le sed -i -e "s/$mot_a_remplacer/\* $mot_a_remplacer/g" $fic n'est pas faisable sous mon OS....bizarre...
Merci d'avance!
Configuration: Windows XP Internet Explorer 6.0 AIX SUN SOLARIS
Salut, myvar="toto"
cat $fic | awk '{ sub(/'$myvar'/,"commentaire"); print}'Petit exemple :[jp@MDK trash]$ cat fich.txt
Je m'appelle Toto
et moi Tutu
et mon frère Titi.
[jp@MDK trash]$ var="Toto"
[jp@MDK trash]$ cat fich.txt | awk '{ sub(/'$var'/,"Tata");print}'
Je m'appelle Tata
et moi Tutu
et mon frère Titi.
[jp@MDK trash]$;-))
Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
si j'utilise un SED, je me retrouve avec plusieurs contenu de fichier. Le sed -i -e "s/$mot_a_remplacer/\* $mot_a_remplacer/g" $fic n'est pas faisable sous mon OS....bizarre...
sed -e 's/'$var'/commentaire/' < fichier > fichier.tmp mv fichier.tmp fichier Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Salut,
$ cat plop
àaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
ÀaéeÈeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
àaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
àaéeèeÔoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
àaÉeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
$ sed '
h
s/\(^.\{12\}\).*/\1/
y/àâéèêëîïôöùûü/aaeeeeiioouuu/
y/ÀÂÉÈÊËÎÏÔÖÙÛÜ/AAEEEEIIOOUUU/
x
s/^.\{12\}\(.*\)/\1/
x
G
s/\n//
' plop
aaeeeeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
AaeeEeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
aaeeeeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
aaeeeeOouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
aaEeeeoouuiiàaéeèeôoùuïiàaéeèeôoùuïiàaéeèeôoùuïié
$Remplace "12" par "200" dans ton cas.
;-)) Z'@+...che. JP : Zen, my Nuggets ! ;-) Le savoir n'est bon que s'il est partagé. |
Tu peux poster un bout de ton fichier sur C-joint, s'teuplé que je puisse faire des tests, merci ;-))
|