6 votes

Comment diviser une chaîne de caractères par un caractère en BASH ?

J'aimerais pouvoir diviser un code d'autorisation par l'élément - afin que je puisse opérer sur chaque segment individuellement. Je ne veux pas utiliser de binaires externes ( awk , grep ) - il s'agit d'être aussi minimaliste que possible. Quels sont les moyens d'y parvenir ?

Voici un exemple de code d'authentification :

82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb

14voto

Daniel Li Points 797

Essayez d'utiliser le Séparateur de champ interne ( IFS ):

AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'

OIFS=$IFS                   # store old IFS in buffer
IFS='-'                     # set IFS to '-'

for i in ${AUTH_CODE[@]}    # traverse through elements
do
  echo $i
done

IFS=$OIFS                   # reset IFS to default (whitespace)

Ausgabe:

82a8
bd7d
986d
9dc9
41f5
fc02
2c20
3175
097a
c1eb

En définissant le séparateur de champ interne, vous divisez AUTH_CODE sur le - ce qui vous permet de parcourir les éléments nouvellement créés dans un format foreach boucle.

5voto

Peter Stone Points 1962

Vous pouvez utiliser l'IFS mais celui-ci est plus simple :

echo "82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb"- \
  | while read -d - i; do echo "$i"; done

Veuillez prendre note des ajouts suivants - après la chaîne à diviser - la lecture ignorera le dernier jeton sinon.

4voto

ott-- Points 1071

Une autre façon de procéder avec le filtrage et les tableaux :

AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'
array=( ${AUTH_CODE//-/ } )
for j in ${array[@]} ; do echo $j ; done

2voto

hamstar Points 11

Il suffit d'utiliser l'expansion des paramètres :

AUTH_CODE='82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'
echo "${AUTH_CODE//-/$'\n'}"

Ausgabe:

82a8
bd7d
986d
9dc9
41f5
fc02
2c20
3175
097a
c1eb

0voto

zacharyliu Points 2074
for i in {1..10}; do echo '82a8-bd7d-986d-9dc9-41f5-fc02-2c20-3175-097a-c1eb'|cut -d"-" -f$i;done

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X