Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/03/2019, à 18:11

Thorbjorn

Extraire le premier caractère d'une ligne

Bonsoir,
Je suis face a un problème, j'essaie de faire un test d'égalité avec le premier que le premier caractère d'une ligne...
mon code ressemble a ça:

echo "Donner une priorité entre 1 et 3 : "
read prio
if (('premier caractère d'une ligne' ==$prio ))
then
	echo "priorité déjà donné a la tâche"
else
	sed -i "s/$prio $2/^ $2/g" todo.txt
fi

Mais quoique je mette dans mon if cela me met systématiquement un message d'erreur...
Et mon sed ne m'a pas l'air très au point non plus...
Si quelqu'un sait comment faire je suis preneur!! smile

Hors ligne

#2 Le 12/03/2019, à 18:38

Sciensous

Re : Extraire le premier caractère d'une ligne

1. les tests avec if se font avec [ et ] et non (( ))
2. il faut laisser des espaces entre opérateurs et variables
3. sed: le ^ (et autre caractère regex) est interprété dans le premier motif; pas le second
4. que signifie pour toi: 'premier caractère d'une ligne' dans le if ?
5. il y a le ' "d'une ligne" en trop  !

Dernière modification par Sciensous (Le 12/03/2019, à 18:46)


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#3 Le 12/03/2019, à 18:44

nany

Re : Extraire le premier caractère d'une ligne

Bonjour,


On ne sait pas d’où vient la ligne dont tu veux extraire le premier caractère mais voici une piste :

echo "blablabla" | grep -o "^."

Hors ligne

#4 Le 12/03/2019, à 18:47

Thorbjorn

Re : Extraire le premier caractère d'une ligne

1. Ah! je n'avais jamais vu [ et ], mais je l'utiliserai maintenant
2. oui désolé c'est une faute de frappe
3. Je viens de voir mon erreur, je devais mettre:

 sed -i "s/^ $2/$prio $2/g" todo.txt 

Malheureusement cela ne marche pas plus...
Je veux changer le premier caractère de la ligne (qui est 1 par défaut) par celui rentré dans l'argument prio

voila voila...

Hors ligne

#5 Le 12/03/2019, à 18:47

Watael

Re : Extraire le premier caractère d'une ligne

je préfère faire les test avec test, ça a le mérite de montrer qu'il s'agit de commande, et pas de "groupeurs" : ( [ et autre.

quel est le message d'erreur, précisément ?

de toute évidence, il faut urgemment lire un tuto.

sed '/^'"$prio"'/!s/^./'"$prio"'/' fichier

et c'est tout, pas besoin de bla bla script.

Dernière modification par Watael (Le 12/03/2019, à 18:49)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 12/03/2019, à 18:52

Thorbjorn

Re : Extraire le premier caractère d'une ligne

J'ai réussi à arranger le message d'erreur, mais problème... ça me fait systématiquement entrer dans le "else"

echo "Donner une priorité entre 1 et 3 : "
read prio
if [ "${b:0:0}" = "$prio" ]  # $b est le numéro de la ligne 
then
	echo "priorité déjà donné a la tâche"
else
	 sed -i "s/^ $2/$prio $2/g" todo.txt
fi

Hors ligne

#7 Le 12/03/2019, à 18:56

Thorbjorn

Re : Extraire le premier caractère d'une ligne

Watael a écrit :
sed '/^'"$prio"'/!s/^./'"$prio"'/' fichier

et c'est tout, pas besoin de bla bla script.

Ça me change le premier caractère de toute les lignes de mon fichier, et non pas de la ligne voulu...

Hors ligne

#8 Le 12/03/2019, à 19:15

pingouinux

Re : Extraire le premier caractère d'une ligne

Bonsoir,
Le mieux serait de montrer un exemple : fichier d'origine, fichier modifié

Hors ligne

#9 Le 12/03/2019, à 19:31

Thorbjorn

Re : Extraire le premier caractère d'une ligne

Pour le moment mon code ressemble à ça:

echo "Donner une priorité entre 1 et 3 : "
read prio
if [ "${b:0:1}" = "$prio" ] 
then
	 echo "Priorité déjà donné a la tâche!"
else
	sed -i 's/^'"$prio"'/!s/^./'"$prio"'/g' todo.txt
fi

Avant le test mon fichier donne:
1 tache1 -- ajouté le ...
1 tache2 -- ajouté le ...
1 tache3 -- ajouté le ...
...

maintenant si je lance le script (pour la tache2 par exemple) et que prio est 1 ça m'écrit "Priorité déjà donné a la tâche!" (même si je remplace : 1 tache2 -- ajouté le ... par :  2 tache2 -- ajouté le ...)
et si prio n'est pas 1 (par ex : 2) le fichier ressemble à:
2 tache1 -- ajouté le ...
2 tache2 -- ajouté le ...
2 tache3 -- ajouté le ...
...

Hors ligne

#10 Le 12/03/2019, à 19:39

pingouinux

Re : Extraire le premier caractère d'une ligne

Comment indiques-tu au script que c'est la tâche 2 que tu veux modifier ?
Qu'est-ce que la variable b dans ton script ?

Hors ligne

#11 Le 12/03/2019, à 19:45

Watael

Re : Extraire le premier caractère d'une ligne

oublie ton script, il ne sert à rien.
la ligne sed vérifie que le premier caractère de chaque ligne n'est pas "$prio", est alors effectue le changement.
la seule indispensable dans le script est la définition de la valeur prio.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 12/03/2019, à 19:51

Thorbjorn

Re : Extraire le premier caractère d'une ligne

Je veux bien mais dans ce cas là comment je fait en sorte que sed ne modifie que la ligne voulu et non pas toutes les lignes de mon fichier?

Hors ligne

#13 Le 12/03/2019, à 20:15

Watael

Re : Extraire le premier caractère d'une ligne

on reprend :
dans ton fichier, toutes les lignes ne commencent pas par la valeur de [color]$prio[/color]
par exemple, dans le fichier

1 toto
1 titi
2 tutu

les deux premières lignes ne commencent par 2
donc, si $prio vaut 2
alors seules ces deux premières lignes seront modifiées :

$ prio=2
$ sed -i '/^'"$prio"'/!{s/^./'"$prio"'/}' fichier
$ cat fichier
2 toto
2 titi
2 tutu

toutes les valeurs qui ne sont pas 2 sont modifiées.

Dernière modification par Watael (Le 12/03/2019, à 20:16)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#14 Le 12/03/2019, à 20:22

nany

Re : Extraire le premier caractère d'une ligne

Thorbjorn a écrit :

ne modifie que la ligne voulu

Quelle est exactement cette ligne voulue ?
J’ai l’impression que tu confonds le premier caractère de la ligne avec le caractère juste après "tache".

Hors ligne