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 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 wink


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#5 Le 26/10/2014, à 19:33

Compte anonymisé

Re : sed et variable

melixgaro a écrit :

de rien wink

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 wink


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#7 Le 26/10/2014, à 22:04

Compte anonymisé

Re : sed et variable

melixgaro a écrit :

ç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 wink

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.

Hors ligne

#10 Le 27/10/2014, à 11:37

Compte anonymisé

Re : sed et variable

tiramiseb a écrit :

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

NéoUbuntonien a écrit :

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à

Hors ligne

#13 Le 27/10/2014, à 21:54

Compte anonymisé

Re : sed et variable

melixgaro a écrit :

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