web-dev-qa-db-fra.com

Bash récupère la dernière ligne d'une variable

Si j'ai une variable avec plusieurs lignes (texte), comment puis-je en extraire la dernière ligne?

J'ai déjà compris comment obtenir la première ligne:

STRING="This is a
multiple line
variable test"
FIRST_LINE=(${STRING[@]})
echo "$FIRST_LINE"

# output:
"This is a"

Il devrait probablement y avoir un opérateur pour la dernière ligne. Ou du moins je suppose que parce qu'avec @ la première ligne sort.

17
Matt Backslash

Utilisation des manipulations de chaînes bash:

$> str="This is a
multiple line
variable test"

$> echo "${str##*$'\n'}"
variable test

${str##*$'\n'} supprimera la correspondance la plus longue jusqu'à \n à partir du début de la chaîne ne laissant ainsi que la dernière ligne en entrée.

18
anubhava

Un moyen simple de le faire est d'utiliser tail:

echo "$STRING" | tail -n1
31
redneb

Si vous voulez un tableau avec un élément par ligne de STRING, utilisez

readarray -t lines <<< "$STRING"

Ensuite, la première ligne serait ${lines[0]}, et la dernière ligne serait ${lines[-1]}. Dans les anciennes versions de bash, les indices négatifs ne sont pas autorisés et vous devrez calculer le dernier index manuellement: ${lines[${#lines[@]}-1]}.

2
chepner