Pages : 1
#1 Le 26/10/2014, à 17:57
- sergeG75018
sed et variable
Bonjour.
J'ai chercher mais pas trouvé.
Je veux récupérer la ligne 25 d'un fichier texte mais 25 est dans une variable
nombre="25"
echo $nombre
comment j'intègre cette variable dans sed.
sed -n '25p' ok
sed -n '$nombrep' pas ok et c'est normal, donc comment je fais comprendre à sed que $nombre est une variable
merci d'avance.
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#2 Le 26/10/2014, à 17:59
- melixgaro
Re : sed et variable
salut,
sed -n ${nombre}'p'
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#3 Le 26/10/2014, à 18:12
- sergeG75018
Re : sed et variable
Merci beaucoup
Ironie, sarcasme ou cynisme? Je ne sais plus
Hors ligne
#4 Le 26/10/2014, à 18:16
- melixgaro
Re : sed et variable
de rien
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#5 Le 26/10/2014, à 19:33
- Compte anonymisé
Re : sed et variable
de rien
Pourquoi ${nombre} et non $nombre ?
Pourquoi ${nombre}'p' et non $nombre'p'
Dernière modification par NéoUbuntonien (Le 26/10/2014, à 19:46)
#6 Le 26/10/2014, à 19:39
- melixgaro
Re : sed et variable
ça marche aussi avec
$nombre
j'ai pris l'habitude de délimiter mes variables avec les accolades, ça ne coûte rien de plus
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#7 Le 26/10/2014, à 22:04
- Compte anonymisé
Re : sed et variable
ça marche aussi avec
$nombre
j'ai pris l'habitude de délimiter mes variables avec les accolades, ça ne coûte rien de plus
Et ça marche aussi avec $nombre'p' j'ai fait
$ nombre="25" && echo $nombre'p'
25p
Donc ceci fonctionnerai également
sed -n $nombre'p'
Dernière modification par NéoUbuntonien (Le 26/10/2014, à 22:10)
#8 Le 26/10/2014, à 22:13
- melixgaro
Re : sed et variable
oui c'est bien ce que j'ai répondu : ça marche sans les accolades autour de nombre
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#9 Le 27/10/2014, à 09:57
- tiramiseb
Re : sed et variable
Salut,
Les accolades servent à faire comprendre au shell que le nom de la variable est entre eux et rien de plus. Ici, melixgaro montre un exemple où la lettre "p" est protégée par les apostrophes (« guillemets simples »), donc les accolades ne sont en effet pas nécessaires.
Ce qu'il faut comprendre, c'est que bash prend tout comme des chaînes de caractères.
« ${nombre}'p' » et « $nombre'p' » sont donc strictement identiques, ils signifient au shell : « la valeur de la variable nombre suivie, sans espace, de la chaîne de caractères 'p' ». Mais attention, la variable "nombre" n'est pas protégée par des guillemets : si elle contient un espace, celui-là sera considéré comme un séparateur.
Une approche qui me semble plus naturelle est la suivante :
« "${nombre}p" », cela signifie « une chaîne composée de la valeur de "nombre" et de la lettre "p" ».
Si la valeur de "nombre" est 25, alors dans tous les cas on aura comme résultat un argument, « 25p ».
Par contre, si la valeur de "nombre" est "12 45" (avec une espace entre les deux), alors dans l'exemple de melixgaro (avec ou sans accolade) on aura deux arguments, « 12 » et « 45p », alors que dans mon exemple on aura un argument, « 12 45p », car la variable est protégée par les guillemets.
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#10 Le 27/10/2014, à 11:37
- Compte anonymisé
Re : sed et variable
Salut,
Les accolades servent à faire comprendre au shell que le nom de la variable est entre eux et rien de plus. Ici, melixgaro montre un exemple où la lettre "p" est protégée par les apostrophes (« guillemets simples »), donc les accolades ne sont en effet pas nécessaires.
Ce qu'il faut comprendre, c'est que bash prend tout comme des chaînes de caractères.
« ${nombre}'p' » et « $nombre'p' » sont donc strictement identiques, ils signifient au shell : « la valeur de la variable nombre suivie, sans espace, de la chaîne de caractères 'p' ». Mais attention, la variable "nombre" n'est pas protégée par des guillemets : si elle contient un espace, celui-là sera considéré comme un séparateur.
Une approche qui me semble plus naturelle est la suivante :
« "${nombre}p" », cela signifie « une chaîne composée de la valeur de "nombre" et de la lettre "p" ».
Si la valeur de "nombre" est 25, alors dans tous les cas on aura comme résultat un argument, « 25p ».
Par contre, si la valeur de "nombre" est "12 45" (avec une espace entre les deux), alors dans l'exemple de melixgaro (avec ou sans accolade) on aura deux arguments, « 12 » et « 45p », alors que dans mon exemple on aura un argument, « 12 45p », car la variable est protégée par les guillemets.
Pourtant, j'ai la même écriture
bruno@cd214289:~$ nombre="25 42" && echo $nombre'p' && echo "${nombre}p"
25 42p
25 42p
bruno@cd214289:~$
Comment voir qu'il s'agit de deux arguments dans le premier résultat ?
Dernière modification par NéoUbuntonien (Le 27/10/2014, à 11:39)
#11 Le 27/10/2014, à 11:43
- melixgaro
Re : sed et variable
salut,
voici l'utilité des accolades
$ foo="bonjour"
$ foobar="aurevoir"
$ echo "$foo"
bonjour
$ echo "$foobar"
aurevoir
$ echo "${foo}bar" # avec les accolades, je fais comprendre au shell que je veux la variable foo et non pas foobar
bonjourbar
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#12 Le 27/10/2014, à 11:53
- tiramiseb
Re : sed et variable
Pourtant, j'ai la même écriture
bruno@cd214289:~$ nombre="25 42" && echo $nombre'p' && echo "${nombre}p" 25 42p 25 42p
Oui tu as le même résultat car echo, quand il reçoit deux arguments, les écrit l'un à la suite de l'autre, séparés par une virgule.
Exemple avec "for" :
$ for i in $nombre'p'
> do
> echo "==> $i"
> done
==> 25
==> 42p
$ for i in "${nombre}p"
> do
> echo "==> $i"
> done
==> 25 42p
PS : évite de citer des messages entiers, ça n'apporte absolument rien à la discussion et ça la rend difficile à lire. Limite les citations aux points importants, comme ce que je viens de faire là
Sébastien Maccagnoni - https://www.maccagnoni.eu - https://www.domotego.com
Hors ligne
#13 Le 27/10/2014, à 21:54
- Compte anonymisé
Re : sed et variable
salut,
voici l'utilité des accolades [...]
leur utilité est très clair, ça j'avais bien compris mais dans les explications de tiramiseb, j'avais compris que dans l'un des cas il y avait 2 variable en résultats
J'avais du mal à comprendre ce que disait tiramiseb, si non, effectivement les accolades permettent de séparer un variable et son nom.
Mais merci pour ces quelques révisions, une piqure de rappel n'est jamais mauvais :-)
#14 Le 27/10/2014, à 21:59
- Compte anonymisé
Re : sed et variable
OK tiramiseb et merci
Pages : 1