Je veux analyser un variable (dans mon cas c'est la version du kit de développement) pour le faire dot (.
) gratuit. Si version='2.3.3'
, la sortie souhaitée est 233
.
J'ai essayé comme ci-dessous, mais cela nécessite .
à remplacer par un autre caractère me donnant 2_3_3
. Cela aurait été bien si tr . ''
aurait fonctionné.
1 VERSION='2.3.3'
2 echo "2.3.3" | tr . _
Il n'est pas nécessaire d'exécuter un programme externe. bash
's manipulation de chaîne peut le gérer (également disponible dans ksh
(d'où il vient) et zsh
):
$ VERSION='2.3.3'
$ echo "${VERSION//.}"
233
(Dans les manuels de ces shells, vous pouvez trouver cela dans la section d'extension des paramètres.)
Par ordre chronologique:
echo "$VERSION" | tr -d .
echo "$VERSION" | sed 's/\.//g'
echo $VERSION:as/.//
set -f
IFS=.
set -- $VERSION
IFS=
echo "$*"
ash
lorsqu'il est construit avec ASH_BASH_COMPAT
)echo "${VERSION//.}"
echo $VERSION:gs/./
En plus des réponses réussies existe déjà. La même chose peut être obtenue avec tr
, avec le --delete
option.
echo "2.3.3" | tr --delete .
Qui produira: 233
vous devriez essayer avec sed
à la place
sed 's/\.//g'
$ VERSION='2.3.3'
$ Perl -pe 's/\.//g' <<< "$VERSION"
233
$ VERSION='2.3.3'
$ python -c 'import sys;print sys.argv[1].replace(".","")' "$VERSION"
233
Si $VERSION
ne contient que des chiffres et des points, nous pouvons faire quelque chose d'encore plus court:
$ python -c 'print "'$VERSION'".replace(".","")'
233
(attention c'est une vulnérabilité d'injection de code si $VERSION
peut contenir n'importe quel caractère).
$ VERSION='2.3.3'
$ awk 'BEGIN{gsub(/\./,"",ARGV[1]);print ARGV[1]}' "$VERSION"
233
Ou ca:
$ awk '{gsub(/\./,"")}1' <<< "$VERSION"
233
echo "$VERSION" | tr -cd [:digit:]
Cela ne retournerait que des chiffres, quels que soient les autres caractères présents