4 votes

bash obtient la deuxième occurrence après le split

Je veux diviser les volumes de texte avec "|" comme espace et obtenir la deuxième occurrence, c'est-à-dire : valeur - 'test2'.

volumes=|test1|test2
echo $volumes | tr "|" "\n"

La commande ci-dessus divise chaque ligne. Je peux la parcourir en boucle et obtenir la valeur mais je veux la méthode la plus efficace.

6voto

steeldriver Points 118154

Vous pouvez utiliser la substitution de paramètres intégrée au Shell. "${volumes##*|}" qui supprime la plus longue chaîne initiale correspondant à un | caractère

$ volumes="|test1|test2"
$ echo "${volumes##*|}"
test2

Alternativement, il y a cut

$ cut -d\| -f3 <<< "$volumes"
test2

o awk

$ awk -F\| '{print $NF}' <<< "$volumes"
test2

3voto

Stewart Points 1385

Steeldriver vous a déjà donné les options les plus faciles. En voici d'autres :

  • awk

    awk -F'|' '{print $3}' <<<"$volumes"
  • perl

    perl -F"\|" -lane 'print $F[2]' <<<"$volumes"
  • sed

    sed 's/.*|//' <<<$volumes

2voto

A.B. Points 84870

Avec votre tr comando

$ volumes="|test1|test2"
$ tr "|" "\n" <<< $volumes | tail -n1
test2

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