[Shell] Help pb substitution char ds fichier
Fermé
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
-
27 avril 2007 à 16:55
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 30 avril 2007 à 16:25
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 30 avril 2007 à 16:25
A voir également:
- [Shell] Help pb substitution char ds fichier
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier host - Guide
- Ouvrir fichier .bin - Guide
9 réponses
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
30 avril 2007 à 10:29
30 avril 2007 à 10:29
Ben alors, personne peux m'aider ? snif snif :(
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
30 avril 2007 à 10:56
30 avril 2007 à 10:56
Salut,
Peut être que si tu nous montrais un peu de ton travail, nous serions plus enclin à t'aider plutôt qu'à te mâcher tout le boulot...
;-))
Peut être que si tu nous montrais un peu de ton travail, nous serions plus enclin à t'aider plutôt qu'à te mâcher tout le boulot...
;-))
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
30 avril 2007 à 11:27
30 avril 2007 à 11:27
Oky,
#recuperation du num de ligne ou se trouve mon occurence ${tab[0]} dans mon fichier cs.txt
num_line=`grep -n ${tab[0]} cs.txt | awk -F ':' '{print$1}'`
> echo $num_line
>203
#recuperation du 3eme champs (appellé rule) de cette ligne
rule=`grep -n ${tab[0]} cs.txt | awk -F ' ' '{print$3}'`
>echo $rule
>LABEL_TOTO_22
# Substitution de $rule par ${tab[1]}
sed '$num_line s/$rule/${tab[1]}/' cs.txt
>sed: -e expression #1, char 3: Extra characters after command
#recuperation du num de ligne ou se trouve mon occurence ${tab[0]} dans mon fichier cs.txt
num_line=`grep -n ${tab[0]} cs.txt | awk -F ':' '{print$1}'`
> echo $num_line
>203
#recuperation du 3eme champs (appellé rule) de cette ligne
rule=`grep -n ${tab[0]} cs.txt | awk -F ' ' '{print$3}'`
>echo $rule
>LABEL_TOTO_22
# Substitution de $rule par ${tab[1]}
sed '$num_line s/$rule/${tab[1]}/' cs.txt
>sed: -e expression #1, char 3: Extra characters after command
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
30 avril 2007 à 12:26
30 avril 2007 à 12:26
Ok, c'est parti...
Déjà remplace "num_line=`grep -n ${tab[0]} cs.txt | awk -F ':' '{print$1}'`" par :
Déjà remplace "num_line=`grep -n ${tab[0]} cs.txt | awk -F ':' '{print$1}'`" par :
num_line=$(sed -n '/'${tab[0]}'/=' cs.txt)Puis enlève le switch "-n" de ta variable "$rule" (inutile), et pour finir écrit ta substitution avec sed comme suit (en changeant le caractère délimiteur "/" par "%", à cause des "slashs" présents dans ta variable tableau) :
sed ''"$num_line"'s%'"$rule"'%'${tab[1]}'%' cs.txt;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
30 avril 2007 à 14:12
30 avril 2007 à 14:12
Nickel merci ;-)
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
30 avril 2007 à 15:31
30 avril 2007 à 15:31
Question bonus
Si je mets la cmd sed ds une boucle afin de parcourir tout mon tableau, je ne recupere que la derniere modification :( ds mon fichier updated_cs.txt (normal en fait !)
echo "##################################"
echo "# Starting CS update #"
echo "##################################"
while [ "${idx}" -lt "$limite" ]
do
rule=`grep -n ${tab[${idx}]} cs.txt | awk -F ' ' '{print$3}'`
num_line=`grep -n ${tab[${idx}]} cs.txt | awk -F ':' '{print$1}'`
sed ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%' cs.txt > updated_cs.txt
idx=$((${idx}+2))
done
echo "#############################"
echo "# Operation completed ! #"
echo "#############################"
Avez vous une idée du comment je pourrai update mon fichier cs.txt avec toutes les modifs ?
Si je mets la cmd sed ds une boucle afin de parcourir tout mon tableau, je ne recupere que la derniere modification :( ds mon fichier updated_cs.txt (normal en fait !)
echo "##################################"
echo "# Starting CS update #"
echo "##################################"
while [ "${idx}" -lt "$limite" ]
do
rule=`grep -n ${tab[${idx}]} cs.txt | awk -F ' ' '{print$3}'`
num_line=`grep -n ${tab[${idx}]} cs.txt | awk -F ':' '{print$1}'`
sed ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%' cs.txt > updated_cs.txt
idx=$((${idx}+2))
done
echo "#############################"
echo "# Operation completed ! #"
echo "#############################"
Avez vous une idée du comment je pourrai update mon fichier cs.txt avec toutes les modifs ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
30 avril 2007 à 15:47
30 avril 2007 à 15:47
>>
sed ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%' cs.txt >> updated_cs.txt;-))
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
30 avril 2007 à 16:11
30 avril 2007 à 16:11
Merci pour ton aide jipicy ;)
Mais là j'ai n fois le contenu de mon fichier cs.txt ds updated_cs.txt. Chacune avec des recopies avec une modification differente.
(n etant le nombre d'update à faire)
Mais là j'ai n fois le contenu de mon fichier cs.txt ds updated_cs.txt. Chacune avec des recopies avec une modification differente.
(n etant le nombre d'update à faire)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 896
30 avril 2007 à 16:25
30 avril 2007 à 16:25
Comment doit être formaté ton fichier en sortie ?
1- A l'identique du 1er avec les modifications/substitutions ?
2- juste les lignes modifiées les unes à la suite des autres ?
Cas n°1 (fais une sauvegarde de ton fichier avant, les modifications se faisant à la volée dans le fichier original. Tu dois avoir une version de "sed" supérieure ou égale à 4.0) =
Cas n°2 =
1- A l'identique du 1er avec les modifications/substitutions ?
2- juste les lignes modifiées les unes à la suite des autres ?
Cas n°1 (fais une sauvegarde de ton fichier avant, les modifications se faisant à la volée dans le fichier original. Tu dois avoir une version de "sed" supérieure ou égale à 4.0) =
sed -i ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%' cs.txt
Cas n°2 =
sed -n ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%p' cs.txt >> updated_cs.txt;-))
Obi_wan31
Messages postés
13
Date d'inscription
jeudi 19 avril 2007
Statut
Membre
Dernière intervention
30 avril 2007
30 avril 2007 à 16:24
30 avril 2007 à 16:24
Pb reslou,
Je rajoute une cmd mv apres ma cmd sed
sed ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%' cs.txt > updated_cs.txt
mv updated_cs.txt cs.txt
Je rajoute une cmd mv apres ma cmd sed
sed ''"$num_line"'s%'"$rule"'%'${tab_ci[$((${idx}+1))]}'%' cs.txt > updated_cs.txt
mv updated_cs.txt cs.txt