100 votes

Supprimer le premier caractère d'une chaîne dans Bash

Je dois calculer md5sum d'une chaîne (pathfile) par ligne dans mon ls décharge, directory_listing_file :

 ./r/g4/f1.JPG
./r/g4/f2.JPG
./r/g4/f3.JPG
./r/g4/f4.JPG

Mais cette somme md5 doit être calculée sans le point initial. J'ai écrit un script simple :

 while read line
do
    echo $line | exec 'md5sum'
done

./g.sh < directory_listnitg.txt

Comment supprimer le premier point de chaque ligne ?

262voto

LiXCE Points 2069
myString="${myString:1}"

À partir du caractère numéro 1 de myString (le caractère 0 étant le caractère le plus à gauche) renvoie le reste de la chaîne. Les "s autorisent les espaces dans la chaîne. Pour plus d'informations sur cet aspect, consultez $IFS.

70voto

fulmicoton Points 5389

Vous pouvez le diriger vers

 cut -c2-

Ce qui vous donne

 while read line
do
echo $line | cut -c2- | md5sum
done

./g.sh < directory_listnitg.txt

5voto

Fredrik Pihl Points 20944

Approche différente, utilisant sed, qui a l'avantage de pouvoir gérer les entrées qui ne commencent pas par un point. De plus, vous ne rencontrerez pas de problèmes avec echo ajoutant une nouvelle ligne à la sortie, ce qui entraînera le rapport de md5sum sur un résultat faux.

 #!/bin/bash

while read line
do
     echo -n $line | sed 's/^.//' | md5sum
done < input

comparez-les :

 $ echo "a" | md5sum
60b725f10c9c85c70d97880dfe8191b3  -

$ echo -n "a" | md5sum
0cc175b9c0f1b6a831c399e269772661  -

5voto

Rafael Oliveira Points 129

Il y a un moyen très simple d'y parvenir :

Supposons que nous ne voulions pas le préfixe "i-" de la variable

 $ ROLE_TAG=role                                                                            
$ INSTANCE_ID=i-123456789

Vous avez juste besoin d'ajouter '#'+[your_exclusion_pattern], par exemple :

 $ MYHOSTNAME="${ROLE_TAG}-${INSTANCE_ID#i-}"  
 $ echo $MYHOSTNAME
role-123456789

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X