Supprimer les sous-chaîne correspondant modèle à la fois au début et à la fin de la variable
Comme le dit le titre, je suis à la recherche d'un moyen de supprimer un modèle défini à la fois au début d'une variable et à la fin. Je sais que je dois utiliser #
et %
mais je ne connais pas la syntaxe correcte.
Dans ce cas, je veux supprimer http://
au début, et /score/
à la fin de la variable $line
qui est lu à partir de file.txt
.
- Ce genre de modèle? Pouvez-vous être un peu plus précis?
- oui, dans ce cas: http:// au début, et /score/ à la fin. L' $ligne est lue à partir d'un file.txt
- Ce que vous cherchez est le paramètre d'expansion, et plus précisément à votre cas, le
${parameter#word}
et${parameter%word}
près de la fin de cet article de manuel de Bash
Vous devez vous connecter pour publier un commentaire.
Bien, vous ne pouvez pas imbriquer
${var%}
/${var#}
opérations, vous aurez à utiliser une variable temporaire.Comme ici:
Alternativement, vous pouvez utiliser des expressions régulières (par exemple) sed:
Vous devez le faire en 2 étapes :
Il y a un moyen de le faire en une étape, en utilisant uniquement intégré dans bash fonctionnalités (pas de l'exécution de programmes externes tels que
sed
) -- avecBASH_REMATCH
:Correspond à l'expression régulière sur le côté droit de la
=~
test, et met les groupes dans laBASH_REMATCH
tableau.Cela dit, il est plus conventionnel à l'utilisation de deux PE expressions et une variable temporaire:
...dans l'exemple ci-dessus, le
extglob
option est utilisée pour autoriser l'environnement reconnus "extglobs" -- bash les extensions de glob syntaxe (prise de glob-style profils similaires en puissance à des expressions régulières), parmi lesquels?(foo)
signifie quefoo
est facultatif.En passant, je suis en utilisant
printf
plutôt queecho
dans ces exemples, parce que beaucoup deecho
's les comportements sont définis par l'implémentation -- par exemple, considérons le cas où la variable le contenu d'-e
ou-n
.comment sur