Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Bash : obtenir les 3 premières lettres du nom d'un fichier

18 réponses
Avatar
Olivier V
Bonjour,

Comment obtenir, dans un script, les 3 premières lettres du nom d'un fichier
(connu sous $cible) ?

Merci

Olivier V

10 réponses

1 2
Avatar
lhabert
Olivier V :

Comment obtenir, dans un script, les 3 premières lettres du nom d'un fichier
(connu sous $cible) ?


A=`{ dd bs=3 count=1;echo a; } <<EOF
$cible
EOF
`
B=${A%a}

, et utiliser « "$B" ».

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:dqm6sg$2jj$,
*Luc Habert* tapota sur f.c.o.l.configuration :

Olivier V :
Comment obtenir, dans un script, les 3 premières lettres du nom d'un
fichier (connu sous $cible) ?


A=`{ dd bs=3 count=1;echo a; } <<EOF
$cible
EOF
`
B=${A%a}

, et utiliser « "$B" ».


Je ne veux pas te paraitre désagréable, mais dans le genre compliqué et
inutile j'ai rarement vu aussi fort, pourtant ton niveau en scripting shell
n'est pas mauvais. Ou alors quelque chose m'échappe dans ta façon de faire
ce qui ne serait pas étonnant vu ma fatigue.

Sinon, je propose ceci :

$ echo ${cible::3}

ou bien :

$ expr substr "$cible" 1 3

--
Sébastien Monbrun aka TiChou


Avatar
Nicolas George
Sébastien Monbrun aka TiChou wrote in message
:
Sinon, je propose ceci :

$ echo ${cible::3}


C'est censé marcher avec quoi, ça ? Ce n'est pas dans Single Unix, dash et
zsh me font une erreur (bad substitution / closing brace expected), et avec
bash ça donne l'identité.

Avec zsh, on peut faire :

$cible[1,3]

Avatar
lhabert
Sébastien Monbrun aka TiChou :

Je ne veux pas te paraitre désagréable, mais dans le genre compliqué et
inutile j'ai rarement vu aussi fort,


:-)

Sinon, je propose ceci :

$ echo ${cible::3}


Je ne connais pas les whizzbangeries de bash, donc je pouvais pas le
proposer.

ou bien :

$ expr substr "$cible" 1 3


Ah oui, bien sur, j'aurais du penser à expr. Enfin, note qu'il faut quand
même le combiner avec le reste de ce que j'ai grotesquifié, au cas où le
troisième caractère serait un n :

A=`expr substr "$cible" 1 3; echo a`
B=${A%a}

Avatar
Calimero
Nicolas George wrote:
Sébastien Monbrun aka TiChou wrote in message
:

Sinon, je propose ceci :

$ echo ${cible::3}



C'est censé marcher avec quoi, ça ? Ce n'est pas dans Single Unix, dash et
zsh me font une erreur (bad substitution / closing brace expected), et avec
bash ça donne l'identité.


:~$ cible=TotoLeZero
:~$ echo ${cible::3}
Tot
:~$ bash --version
GNU bash, version 3.00.16(1)-release (i386-pc-linux-gnu)
Copyright (C) 2004 Free Software Foundation, Inc.
:~$

Les joies de la portabilité ;-)

--
@+
Calimero


Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:dqmcq6$2s9u$,
*Nicolas George* tapota sur f.c.o.l.configuration :

$ echo ${cible::3}


C'est censé marcher avec quoi, ça ?


Avec le shell demandé par l'OP. Testé avec la version 2.04, 2.05 et 3.00.

avec bash ça donne l'identité.


Qu'entends-tu par « identité » ?

Dans man bash j'ai :

${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to
length characters of parameter starting
at the character specified by offset.
If length is omitted, expands to the
substring of parameter starting at the
character specified by offset. length
and offset are arithmetic expressions
(see ARITHMETIC EVALUATION below).
length must evaluate to a number greater
than or equal to zero. If offset evalu-
ates to a number less than zero, the
value is used as an offset from the end
of the value of parameter. If parameter
is @, the result is length positional
parameters beginning at offset. If
parameter is an array name indexed by @
or *, the result is the length members
of the array beginning with ${parame-
ter[offset]}. Substring indexing is
zero-based unless the positional parame-
ters are used, in which case the index-
ing starts at 1.

--
Sébastien Monbrun aka TiChou


Avatar
George Abitbol
Sébastien Monbrun aka TiChou wrote in message
:

Sinon, je propose ceci :

$ echo ${cible::3}



C'est censé marcher avec quoi, ça ? Ce n'est pas dans Single Unix, dash et
zsh me font une erreur (bad substitution / closing brace expected), et avec
bash ça donne l'identité.

Avec zsh, on peut faire :

$cible[1,3]


et echo $cible | cut -c 1-3 ca devrait marcher partout non ?


Avatar
Olivier V
Merci à tous.

Encore une petite question du même style :

comment obtenir toutes les lettres SAUF la dernière d'un nom de fichier ?

Merci.

Olivier V
Avatar
lhabert
Olivier V :

comment obtenir toutes les lettres SAUF la dernière d'un nom de fichier ?


${ploum%?}

Avatar
Olivier V

Olivier V :

comment obtenir toutes les lettres SAUF la dernière d'un nom de fichier ?


${ploum%?}


Radical ... !
Et pour ma culture personnelle, comment aurait fait pour supprimer les deux
dernières lettres ?
J'ai essayé ${${ploum%?}%?}, mais sans succès.

J'ai encore une ultime (j'espère) question qui s'éloigne un peu ... :

J'utilise la commande 'ttf2pt1' qui me renvoie en console des lignes
(extrait ci-dessous).
Comment récupérer l'information qui suit 'FontName' (ComicSansMS sur cet
exemple) pour pouvoir la donner plus tard en argument ?

Mille merci.

Olivier V

Sortie de 'ttf2pt1' :

[...]
Found Unicode Encoding
Guessed italic angle: 0.000000
FontName ComicSansMS
No Kerning data
Finished - font files created


1 2