web-dev-qa-db-fra.com

Comment extraire la dernière partie de la chaîne en bash?

J'ai variable:

A="Some variable has value abc.123"

J'ai besoin d'extraire cette valeur, c'est-à-dire abc.123. Est-ce possible en bash?

25
user710818

Comment savez-vous où commence la valeur? Si c'est toujours les 5e et 6e mots, vous pouvez utiliser par exemple:

B=$(echo $A | cut -d ' ' -f 5-)

Cela utilise la commande cut pour découper une partie de la ligne, en utilisant un espace simple comme délimiteur Word.

9
unwind

Le plus simple est

echo $A | awk '{print $NF}'

Edit: explication de comment cela fonctionne ...

awk divise l'entrée en différents champs, en utilisant par défaut des espaces comme séparateur. Codage dur 5 à la place de NF affiche le 5ème champ dans l'entrée:

echo $A | awk '{print $5}'

NF est une variable awk intégrée qui donne le nombre total de champs dans l'enregistrement en cours. Ce qui suit renvoie le nombre 5 car il y a 5 champs dans la chaîne "Some variable has value abc.123":

echo $A | awk '{print NF}'

Combiner $ avec NF affiche le dernier champ de la chaîne, quel que soit le nombre de champs que contient votre chaîne.

76
gammay

Oui; cette:

A="Some variable has value abc.123"
echo "${A##* }"

imprimera ceci:

abc.123

(Le ${parameter##Word} la notation est expliquée dans §3.5.3 "Shell Parameter Expansion" du Bash Reference Manual .)

34
ruakh

Quelques exemples d'utilisation de l'extension de paramètres

A="Some variable has value abc.123"
echo "${A##* }"

abc.123

Correspondance la plus longue sur l'espace ""

echo "${A% *}"

Some variable has value

Match le plus long. point

echo "${A%.*}"

Some variable has value abc

Correspondance la plus courte sur l'espace ""

echo "${A%% *}"

some

En savoir plus Shell-Parameter-Expansion

10
koola