Comment puis-je supprimer tout le texte après un caractère, dans ce cas un deux-points (":"), en bash ? Puis-je aussi supprimer le deux-points ? Je n'ai aucune idée de comment faire.
Réponses
Trop de publicités?En Bash (et ksh, zsh, dash, etc.), vous pouvez utiliser l'expansion de paramètres avec %
pour supprimer des caractères de la fin de la chaîne ou #
pour supprimer des caractères du début de la chaîne. Si vous utilisez un seul de ces caractères, la plus petite chaîne correspondante sera supprimée. Si vous doublez le caractère, la plus longue sera supprimée.
$ a='hello:world'
$ b=${a%:*}
$ echo "$b"
hello
$ a='hello:world:of:tomorrow'
$ echo "${a%:*}"
hello:world:of
$ echo "${a%%:*}"
hello
$ echo "${a#*:}"
world:of:tomorrow
$ echo "${a##*:}"
tomorrow
Je connais quelques solutions:
# Nos données factices:
A=user:mail:password
-
Avec awk et pipe:
$ echo $A | awk -v FS=':' '{print $1}' user
-
Par le biais de variables bash:
$ echo ${A%%:*} user
-
Avec pipe et sed:
$ echo $A | sed 's#:.*##g' user
-
Avec pipe et grep:
$ echo $A | egrep -o '^[^:]+' user
-
Avec pipe et cut:
$ echo $A | cut -f1 -d\: user
- Réponses précédentes
- Plus de réponses