#1 Le 28/01/2013, à 13:35
- kromei
KSH insérer une chaine de caractère dans un endroit fixe
Bonjour,
Presque tout est dit dans le titre je cherche à insérer une chaîne de caractère voulu à chaque ligne de chaque fichiers d'un répertoire.
L'insertion de cette chaîne est à un endroit fixe.
voici un exemple de ligne :
abcdefgh,klmni,pqrst,uvwxy
Je cherche à insérer la chaîne soit après la première virgule soit après le 9 ieme caractère les deux sont fixes pour tous les fichiers
Merci de vos réponse
Hors ligne
#2 Le 28/01/2013, à 16:06
- temps
Re : KSH insérer une chaine de caractère dans un endroit fixe
En langage c, cela devrait pouvoir se faire.
En bash aussi.
Mais il doit certainement y avoir d'autres solutions
Cordialement
Parce que l'USB bootable est le support des systèmes experts,
Parce que l'USB bootable contient sa propre image au démarrage.
L'USB bootable permet de créer un monde à la dimension de son imagination
https://www.letime.net
Hors ligne
#3 Le 28/01/2013, à 16:09
- claudius01
Re : KSH insérer une chaine de caractère dans un endroit fixe
Bonjour,
Je me lance (du moins en ksh)...
#!/bin/ksh
if [ $# -lt 2 ]; then
echo "Usage: $0 <nom_fichier> <chaine_a_inserer>"
echo "Attention: Dans cette 1ere version, les caracteres ' ' (espace)"
echo " dans la <chaine_a_inserer> ne sont pas supportes ;-)"
exit 2
fi
cat $1 | sed 's/ /@@@@/g' > $1.tmp
for line in `cat $1.tmp`
do
echo $line | grep "," > /dev/null
if [ $? -eq 0 ]; then
echo $line | sed 's/,/,####/' | sed 's/####/'${2}'/' > $1.out
else
len=`echo $line | wc -c`
if [ $len -ge 10 ]; then
str_1=`echo $line | cut -c1-9`
str_2=`echo $str_1$2`
str_3=`echo $line | cut -c10-`
echo $str_2$str_3 >> $1.out
else
echo "$line" >> $1.out
fi
fi
done
cat $1.out | sed 's/@@@@/ /g'
rm -f $1.tmp $1.out
exit 0
ce qui donne avec :
$ cat test.txt
abcdefgh,,pqrst uvwxy
12345678901234567890
1234
12345678
123456789
$ ./t.sh test.txt "chaine_a_inserer"
abcdefgh,chaine_a_inserer,pqrst uvwxy
123456789chaine_a_inserer01234567890
1234
12345678
123456789chaine_a_inserer
PS1: Changer les patterns "####" et "@@@@" si en collision potentielle avec le contenu du fichier à traiter
PS2: Faut regarder maintenant à supporter les caractères ' ' (espace) dans la chaîne à insérer
Cordialement, A+
--
Claude
Dernière modification par claudius01 (Le 28/01/2013, à 16:12)
Hors ligne
#4 Le 28/01/2013, à 21:52
- Watael
Re : KSH insérer une chaine de caractère dans un endroit fixe
slaut,
sed 's/\(.\{9\}\)\(.*\)/\1chaine_à_insérer\2/' fichier
si c'est bon, ajoute l'option -i
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 28/01/2013, à 21:58
- kromei
Re : KSH insérer une chaine de caractère dans un endroit fixe
merci de vos réponses claires j'essai celà à la 7ieme heure demain ^^' et je vous dis ce qu'il en ressort. Ps je ne pense pas avoir besoin de gérer l'espace ^^
Hors ligne
#6 Le 29/01/2013, à 02:11
- Latsuj
Re : KSH insérer une chaine de caractère dans un endroit fixe
Bonsoir,
En bash,
#!/bin/bash
# Chaine que l'on souhaite ajoute
chaine="zzz"
# Creation du fichier intermediaire
touch fichierintermediaire.txt;
# Pour tous les fichiers
for file in *; do
# Sur chaque ligne de ce fichier
while read ligne; do
# On prend les 9 premiers caractères
testligne=${ligne:0:9}
# Et on test si il contient une virgule
compteur=`expr index "$testligne" ','`
# Le remplacement
if [[ $compteur = 0 ]]; then
newligne=${ligne/$testligne/$testligne$chaine};
else
newligne=${ligne/","/","$chaine};
fi
echo $newligne 1>> fichierintermediaire.txt
done < $file
# On efface le fichier et on le remplace par le nouveau fichier
rm $file; mv "fichierintermediaire.txt" "$file";
done
exit 0;
Bonne soirée.
Hors ligne
#7 Le 29/01/2013, à 08:07
- kromei
Re : KSH insérer une chaine de caractère dans un endroit fixe
Bonjour,
Merci de vos réponses à tous grâce à vous le problème est résolu. Pour information au vu de vos lignes de codes passionnées ^^ j'aurai été du genre à élaborer des solutions ressemblant à celle de Latsuj et à celle de claudius01.
J'ai choisi au final la solution de Watael car tout simplement celle-ci me semble plus optimisée et que je ne souhaite pas d'un fichier temporaire.
Merci à vous tous si le sujet peut se clore je vais le faire
Bonne journée
Hors ligne