Quelle commande Linux shell renvoie une partie d'une chaîne de caractères? [dupliquer]

cette question a déjà une réponse ici:

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:

77
demandé sur Community 2008-10-20 22:33:34

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

-cN-M indique à la commande cut de retourner les colonnes N à M , inclusivement.

144
répondu Toybuilder 2015-08-28 10:58:58

à 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 .

89
répondu dmckee 2017-02-28 15:12:14

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.

31
répondu ata 2011-11-12 21:16:11

à 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

17
répondu Juanma 2008-10-20 18:42:06

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).

13
répondu camh 2016-03-20 12:06:23
${string:position:length}
3
répondu Bill the Lizard 2008-10-20 18:37:54