Recuperer le premier element d'une chaine

Résolu/Fermé
Signaler
Messages postés
20
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
25 mars 2008
-
Messages postés
20
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
25 mars 2008
-
Bonjour,

je souhaite récupérer le premier élément de chaque ligne d'un texte (fichier3.txt) qui sera "<" ou ">" et d'ecrire ensuite les lignes commencant par "<" dans un fichier4.txt et celles commencant par ">" dans un fichier5.txt, mais je n'y arrive pas.
J'ai pensé à plusieurs solutions mais en vain. Voici ma dernière idée :

while read line
do
$n = substr($line,0,1)
if [$n = "<" ]
then
(echo -e "$line\n") >> fichier4.txt
else
(echo -e "$line\n") >> fichier5.txt
fi
done < fichier3.txt

mon fichier3.txt etant :
1,3c1,6
< <root name="application">
< <configuration name="prod" context="run">
< <backup oneline="true">
---
> <root
> name="application">
> <configuration name="prod"
> context="run">
> <backup
> oneline="false">

Merci de votre aide car je commence un peu à me démoraliser....

4 réponses

Messages postés
2434
Date d'inscription
jeudi 24 janvier 2008
Statut
Membre
Dernière intervention
23 mai 2018
312
Ton algorithme semble juste mais j'utilise assez peu read. Ce que j'ai à l'esprit c'est que en shell script quand on lit une valeur on précède la variable de $ or après read il n'y en a pas dans ton code.
Je ne sais pas si la syntaxe de read est telle que tu ne dois pas mettre de $ devant un nom de variable mais ce $ est une généralité en Shell Script. Essai donc ça.

Je ne maitrise pas trop les boucles comme tu le fait mais il me semble avoir lu mes fichiers autrement avec ce type de boucles et la redirection était en première ligne plutôt qu'à la fin.

Il existe plusieurs manière de lire un fichier ligne par ligne je te colle des petits codes issues de mon rapport.
cat < /etc/passwd | while true
do
	read ligne
	if [ "$ligne" = "" ]
	then
		break
	fi
	echo "$ligne"
done


function display
{
	while :
	do
		read ligne
		if [ -z "$ligne" ]
		then
			break
		fi
		echo $ligne
	done
}
display < $1


Voilà en espérant que ça aide. :)

PS : En ressortant mes codes on voit qu'il n'y a pas de $ donc ça n'est pas une erreur de ta part mais j'en était plus sûr et je m'en souvenait plus de tout ça. :P
Ah oui et pense à adapter les codes selon tes besoins bien sûr. Moi mon TP c'était de lire le fichier /etc/passwd mais tu peut remplacer par ce qui t'intéresse.
Messages postés
40805
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 890
Salut,
#! /bin/bash

while read ligne
do
if [ "${ligne::1}" = "<" ]
then
echo ${ligne} >> fichier1.txt
elif
[ "${ligne::1}" = ">" ]
then
echo ${ligne} >> fichier2.txt
fi
done < fichier3.txt
;-))
Messages postés
20
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
25 mars 2008

merci de ton idée, mais ça ne marche pas.
Je ne pense pas que cela vienne du $, car l'ecriture s'effectue bien, mais tout s'écrit dans le fichier5.txt car la condition di if n'est pas vérifiée.
Messages postés
20
Date d'inscription
dimanche 2 mars 2008
Statut
Membre
Dernière intervention
25 mars 2008

Merci beaucoup jipicy, ca marche niquel !!
Merci à vous deux pour la rapidité de vos réponses ;-)