#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!!
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 "^."
En 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
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
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".
En ligne