J'ai donc cette chaîne:
[email protected]:/home/some/directory/file
Je veux juste extraire l'adresse du répertoire, ce qui veut dire que je veux seulement le bit après le caractère ":" et obtenir:
/home/some/directory/file
merci.
J'ai besoin d'une commande générique pour que la commande cut ne fonctionne pas car la variable $ var n'a pas de longueur fixe.
Utilisation de sed:
$ [email protected]:/home/some/directory/file
$ echo $var | sed 's/.*://'
/home/some/directory/file
Cela pourrait fonctionner pour vous:
echo ${var#*:}
Voir Exemple 10-10. Correspondance de modèle dans la substitution de paramètre
Pour être complet, utiliser cut
cut -d : -f 2 <<< $var
Et en n'utilisant que bash:
IFS=: read a b <<< $var ; echo $b
Cela fera aussi.
echo $var | cut -f2 -d":"
Cela devrait faire l'affaire:
$ echo "$var" | awk -F':' '{print $NF}'
/home/some/directory/file
Vous ne dites pas quelle Shell vous utilisez. S'il s'agit d'un logiciel compatible POSIX tel que Bash, le développement de paramètres peut faire ce que vous voulez:
Paramètre Expansion
...
${parameter#Word}
Supprimer le plus petit motif de préfixe.
LeWord
est développé pour produire un motif. Le paramètre de développement entraîne alorsparameter
, la plus petite partie du préfixe correspondant au motif supprimé.
En d'autres termes, vous pouvez écrire
$var="${var#*:}"
qui enlèvera tout ce qui correspond à *:
de $var
_ (c'est-à-dire tout ce qui va jusqu'au premier :
). Si vous voulez correspondre au dernier :
, alors vous pouvez utiliser ##
au lieu de #
.
Tout cela en supposant que la partie à supprimer ne contient pas :
(vrai pour les adresses IPv4, mais pas pour les adresses IPv6)
awk -F: '{print $2}' <<< $var