Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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 smile

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

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


eval, c'est mal.

Hors 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 smile

Bonne journée

Hors ligne

Haut de page ↑