Quelle commande Linux shell renvoie une partie d'une chaîne de caractères? [dupliquer]
cette question a déjà une réponse ici:
- substrat D'extrait en Bash 20 réponses
je veux trouver une commande linux qui peut retourner une partie de la chaîne. Dans la plupart des langages de programmation, c'est la fonction substr()
. Ne bash toute commande qui peut être utilisé pour ce but. Je veux être en mesure de faire quelque chose comme cela...
substr "abcdefg" 2 3
- imprime cde
.
question similaire ultérieure:
6 réponses
si vous cherchez 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 retourner les colonnes N
à M
, inclusivement.
à Partir de la page de manuel de 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
, avec cut
.
En "pur" bash vous disposez de nombreux outils pour les (sous -) de manipulation de chaîne, principalement, mais non exclusivement dans le paramètre d'extension :
${parameter//substring/replacement}
${parameter##remove_matching_prefix}
${parameter%%remove_matching_suffix}
Indexé sous-chaîne d'extension (spécial comportements avec les décalages négatifs, et, dans de nouveaux Buffets, des longueurs négatives):
${parameter:offset}
${parameter:offset:length}
${parameter:offset:length}
et bien sûr, les expansions très utiles qui agissent sur la question de savoir si le paramètre est nul:
${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 tweakable que ceux énumérés, et comme je l'ai dit, Il ya d'autres façons de manipuler les chaînes (un commun étant $(command substitution)
combiné avec sed ou tout autre filtre externe). Mais, ils sont si facilement trouvés en tapant man bash
que je ne pense pas qu'il mérite d'étendre davantage ce poste.
à bash vous pouvez essayer ceci:
stringZ=abcABC123ABCabc
# 0123456789.....
# 0-based indexing.
echo ${stringZ:0:2} # prints ab
plus d'échantillons dans le projet de Documentation Linux
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 intégré Linux) et que vous ne voulez pas le processus supplémentaire" echo " que vous devez utiliser cut(1).