Je veux trouver une commande linux qui peut renvoyer une partie de la chaîne. Dans la plupart des langages de programmation, il s'agit de la fonction substr()
. Bash a-t-il une commande pouvant être utilisée à cette fin? Je veux pouvoir faire quelque chose comme ça ... substr "abcdefg" 2 3
- affiche cde
.
Question similaire ultérieure:
Si vous recherchez un utilitaire Shell pour faire quelque chose comme ça, vous pouvez utiliser la commande cut
.
Pour prendre votre exemple, essayez:
echo "abcdefg" | cut -c3-5
qui donne
cde
Où -cN-M
indique à la commande cut de renvoyer les colonnes N
à M
, inclus.
De la page de manuel bash:
${parameter:offset}
${parameter:offset:length}
Substring Expansion. Expands to up to length characters of
parameter starting at the character specified by offset.
[...]
Ou, si vous n'êtes pas sûr d'avoir bash
, envisagez d'utiliser cut
.
En "pure" bash, vous disposez de nombreux outils pour la manipulation de (sous) chaînes, principalement, mais pas exclusivement, dans développement de paramètres :
${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}
Développement de la sous-chaîne indexée (comportements spéciaux avec décalages négatifs et, dans les nouveaux bashs, longueurs négatives):
${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}
Et bien sûr, les extensions très utiles qui déterminent si le paramètre est null:
${parameter:+use this if param is NOT null}
${parameter:-use this if param is null}
${parameter:=use this and assign to param if param is null}
${parameter:?show this error if param is null}
Ils ont plus de comportements modifiables que ceux énumérés, et comme je l'ai dit, il existe d'autres moyens de manipuler des chaînes de caractères (un moyen courant étant $(command substitution)
associé à sed ou à tout autre filtre externe). Mais ils sont si faciles à trouver en tapant man bash
Que je ne pense pas qu'il faille étendre davantage cette publication.
En bash, vous pouvez essayer ceci:
stringZ=abcABC123ABCabc
# 0123456789.....
# 0-based indexing.
echo ${stringZ:0:2} # prints ab
Plus d'échantillons dans The Linux Documentation Project
expr(1)
a une sous-commande substr:
expr substr <string> <start-index> <length>
Cela peut être utile si vous n'avez pas bash (peut-être Linux intégré) et que vous ne voulez pas le processus "echo" supplémentaire dont vous avez besoin pour utiliser cut (1).
${string:position:length}